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

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

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

Mysql區(qū)間分組查詢

場(chǎng)景

一張用戶表(user),有用戶id(id)、余額(balance)等字段,要求展示 余額在某個(gè)區(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)計(jì)結(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 ;

這樣可以查出來每個(gè)范圍對(duì)應(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ù)實(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,依次類推

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

另一種解決辦法

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

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

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

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

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

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

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

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

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

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

需求

tick_count是次數(shù)、user_account是用戶標(biāo)識(shí),user_account可能重復(fù),統(tǒng)計(jì)0次,1-3次、4-6次、7-9次、10-12次、13次以上,這幾個(gè)區(qū)間各有多少個(gè)用戶數(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

運(yùn)行結(jié)果

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

相關(guān)文章

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

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

    這篇文章主要介紹了解決MySQL啟動(dòng)常見錯(cuò)誤:ERROR 2002(HY000) Can‘t connect to local MySQL server through socket‘tmp問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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)資料,文中的介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

彭泽县| 彭山县| 林口县| 扬州市| 额济纳旗| 广宁县| 望奎县| 闽侯县| 微山县| 上犹县| 玛沁县| 麻江县| 东平县| 称多县| 忻州市| 永登县| 奉新县| 湘乡市| 普定县| 江西省| 越西县| 晴隆县| 开远市| 岳西县| 高碑店市| 寿光市| 平阳县| 桂阳县| 惠来县| 贵定县| 新邵县| 舒城县| 棋牌| 新竹县| 乌审旗| 达拉特旗| 邯郸市| 斗六市| 阿克苏市| 齐河县| 扬州市|