現在有表A,A表中有一個欄位number,A表中儲存了一堆很多混亂的資料(number欄位),比如:1,3,4,5,6,8,9,10,11,12,15,88,100,101,102,123給他們按照連續分組求出分組範圍,比如上面的範圍就是:1-1,3-6,8-12,15-15,88-88,100-102,123-123。請問在MySQL中SQL怎麼寫,跪求!
回覆列表
-
1 # Bean毛豆
這個可以用到case...when...,case...when...有點類似我們在其它程式語言中的if...else..功能。透過case...when...的邏輯判斷,我們可以做到分組統計。
case...when...資料的邏輯判斷語法上可以這麼理解:
case 欄位名 when 值 then 符合邏輯時指定的值 else 不符合邏輯指定的值 end簡單來說就是當欄位名符合條件時,我們可以指定一個值,當不符合條件時我們可以指定另外一個值。
題主描述的問題就可以這樣來解決:
case when (number<2 then "1-1" when (number between 3 and 6) then "3-6" .... else end)
這樣就可以解決題主所提到的問題。
在這裡我舉一個例子,比如我們需要統計某個省份的使用者交易金額區間分佈,就可以結合group by進行相應的統計,達到目的。
分步的方法-逐個區間進行統計我們也可以利用where條件進行統計,where條件的統計就需要我們利用union的方法將滿足條件的各個查詢結果合併在一起,得到最終的統計結果。比如
select count(number) number_count from numbers where number between 3 and 6
union
select count(number) number_count from numbers where number between 8 and 12
union
...
不過這樣的話比較麻煩而且比較費時,因此不推薦這麼去做,透過case...when....去處理分割槽間的統計是一個不錯的選擇。