最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql區(qū)間分組查詢的實現(xiàn)方式

 更新時間:2022年10月11日 15:17:15   作者:upupfeng  
這篇文章主要介紹了Mysql區(qū)間分組查詢的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Mysql區(qū)間分組查詢

場景

一張用戶表(user),有用戶id(id)、余額(balance)等字段,要求展示 余額在某個區(qū)間內(nèi)的人數(shù)

? 區(qū)間有0-1萬,1-10萬,10-50萬,50-100萬,100萬+,

下面是模擬數(shù)據(jù):

用戶id?? ??? ?余額
1?? ??? ??? ?100?? ?
2?? ??? ??? ?200?? ?
3?? ??? ??? ?3223
4?? ??? ??? ?100001
5?? ??? ??? ?100025
6?? ??? ??? ?512123
7?? ??? ??? ?565656
8?? ??? ??? ?10000001

統(tǒng)計結(jié)果應(yīng)該如下所示:

余額          人數(shù)
0-1萬        1
1-10萬        2
10-50萬        1
50-100萬    2
100萬+        1

第一想法

select?
?? ?count(if(balance between 0 and 10000, id , null ) ) as "0-1萬",
?? ?count(if(balance between 10001 and 100000, id , null ) ) as "1-10萬",
?? ?count(if(balance between 100001 and 500000, id , null ) ) as "10-50萬",
?? ?count(if(balance between 500001 and 1000000, id , null ) ) as "50-100萬",
?? ?count(if(balance > 1000000, id , null ) ) as "100萬+"
from user ;

這樣可以查出來每個范圍對應(yīng)的人數(shù),但是不盡人意,而且寫的很麻煩…

一番百度之后

select interval(balance,0,10000,100000,500000,1000000) as i ,count(*)?
from user group by i;

select elt(interval(balance,0,10000,100000,500000,1000000),"0-1萬","1-10萬","10-50萬","50-100萬","100萬+") as region ,count(*)?
from user group by region;

利用了mysql提供的interval和elt函數(shù)實現(xiàn)了效果

interval

interval(N,N1,N2,N3) ,比較列表中的N值,該函數(shù)如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。

elt

elt(n,str1,str2,str3,…) 如果n=1,則返回str1,如果n=2,則返回str2,依次類推

兩個函數(shù)結(jié)合,再加上group,實現(xiàn)了這種范圍分組的效果

另一種解決辦法

由于使用的是類似mysql語句查詢的一個分析數(shù)據(jù)庫,它不支持elt函數(shù)和interval函數(shù)(抄mysql沒有抄全…)

實現(xiàn)這種范圍分組的場景,可以通過創(chuàng)建中間表的形式實現(xiàn)。然后通過用戶表去join

創(chuàng)建如下一個中間表:有下限、上限和區(qū)間名三個字段

lower?? ??? ?upper?? ??? ?region
0?? ??? ??? ?10000?? ??? ?0-1萬
10001?? ??? ?100000?? ??? ?1-10萬
100001?? ??? ?500000?? ??? ?10-50萬
500001?? ??? ?1000000?? ??? ?50-100萬
1000000?? ??? ?2000000000?? ?100萬+

用戶表就可以通過余額字段去join這個表

select region,count(*)
from user?
left join tmp on user.balance between tmp.lower and tmp.upper
group by region?

就可以實現(xiàn)范圍分組的效果

相比之前兩種,感覺這個想法很有趣(同事教的)。

按區(qū)間分組查詢、獲取各區(qū)間的總數(shù)

數(shù)據(jù)表如下

需求

tick_count是次數(shù)、user_account是用戶標識,user_account可能重復,統(tǒng)計0次,1-3次、4-6次、7-9次、10-12次、13次以上,這幾個區(qū)間各有多少個用戶數(shù)

select case
         when tc.stick_count = 0 then
          '0'
         when tc.stick_count > 0 and tc.stick_count <= 3 then
          '1to3'
         when tc.stick_count > 3 and tc.stick_count<= 6 then
          '4to6'
         when tc.stick_count > 6 and tc.stick_count <= 9 then
          '7to9'
	     when tc.stick_count > 9 and tc.stick_count <= 12 then
          '10to12'
	     when tc.stick_count >  13 then
          'more13'
       end stickLevel,
       COUNT(DISTINCT user_account) total
  from t_stick_detail_hourly tc 
 group by case
         when tc.stick_count = 0 then
          '0'
         when tc.stick_count > 0 and tc.stick_count <= 3 then
          '1to3'
         when tc.stick_count > 3 and tc.stick_count<= 6 then
          '4to6'
         when tc.stick_count > 6 and tc.stick_count <= 9 then
          '7to9'
		 when tc.stick_count > 9 and tc.stick_count <= 12 then
          '10to12'
	     when tc.stick_count > 13 then
          'more13'
       end

運行結(jié)果

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決MySQL啟動常見錯誤:ERROR 2002(HY000) Can‘t connect to local MySQL server through socket‘tmp問題

    解決MySQL啟動常見錯誤:ERROR 2002(HY000) Can‘t connect

    這篇文章主要介紹了解決MySQL啟動常見錯誤:ERROR 2002(HY000) Can‘t connect to local MySQL server through socket‘tmp問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • mysql創(chuàng)建本地用戶及賦予數(shù)據(jù)庫權(quán)限的方法示例

    mysql創(chuàng)建本地用戶及賦予數(shù)據(jù)庫權(quán)限的方法示例

    這篇文章主要介紹了mysql創(chuàng)建本地用戶及賦予數(shù)據(jù)庫權(quán)限的相關(guān)資料,文中的介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程

    Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程

    這篇文章主要為大家詳細介紹了Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • MySQL多表操作的外鍵約束教程

    MySQL多表操作的外鍵約束教程

    MySQL多表之間的關(guān)系可以概括為:一對一、一對多/多對一關(guān)系,多對多,這篇文章主要介紹了MySQL多表操作的外鍵約束,需要的朋友可以參考下
    2023-01-01
  • MySQL因配置過大內(nèi)存導致無法啟動的解決方法

    MySQL因配置過大內(nèi)存導致無法啟動的解決方法

    這篇文章主要給大家介紹了關(guān)于MySQL因配置過大內(nèi)存導致無法啟動的解決方法,文中給出了詳細的解決示例代碼,對遇到這個問題的朋友們具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • MySQL查詢樹形結(jié)構(gòu)數(shù)據(jù)的兩種方法

    MySQL查詢樹形結(jié)構(gòu)數(shù)據(jù)的兩種方法

    本文主要介紹了MySQL查詢樹形結(jié)構(gòu)數(shù)據(jù)的兩種方法,可以使用遞歸查詢或者閉包表來實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • mysql中的concat()函數(shù)模糊查詢代替${}問題

    mysql中的concat()函數(shù)模糊查詢代替${}問題

    這篇文章主要介紹了mysql中的concat()函數(shù)模糊查詢代替${}問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Mysql時間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條

    Mysql時間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條

    這篇文章主要介紹了Mysql時間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • mysql利用覆蓋索引避免回表優(yōu)化查詢

    mysql利用覆蓋索引避免回表優(yōu)化查詢

    這篇文章主要給大家介紹了關(guān)于mysql如何利用覆蓋索引避免回表優(yōu)化查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)

    MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)

    首先主服務(wù)器把數(shù)據(jù)變化記錄到主日志,然后從服務(wù)器通過I/O線程讀取主服務(wù)器上的主日志,并且把它寫入到從服務(wù)器的中繼日志中,接著SQL線程讀取中繼日志,并且在從服務(wù)器上重放,從而實現(xiàn)MySQL復制。
    2011-04-04

最新評論

资讯 | 特克斯县| 西盟| 安塞县| 商河县| 乌拉特后旗| 仁怀市| 鹤壁市| 屏东县| 陵水| 湘潭市| 上林县| 云浮市| 曲靖市| 睢宁县| 六枝特区| 太谷县| 滕州市| 五常市| 普格县| 泰宁县| 壶关县| 牟定县| 诏安县| 新平| 海晏县| 宜兴市| 龙江县| 阿拉善左旗| 化州市| 平乐县| 兴安盟| 泾源县| 淮南市| 读书| 固阳县| 东辽县| 手游| 沙坪坝区| 周宁县| 珠海市|