2008-10-13 141 views
9

給定一個包含數字字段(mynum)的表(mytable),如何編寫一個基於該字段中的值範圍而不是每個不同值來彙總表數據的SQL查詢?按時間間隔分組

對於更具體的例子起見,讓我們把它間隔3,公正「總結」了COUNT(*),使得結果告訴行,其中myNum的是0-2.99的數量,數量行,其中它是3-5.99,它的6-8.99等

回答

14

的想法是計算有每個組內是恆定值的字段的一些功能,你想:

select count(*), round(mynum/3.0) foo from mytable group by foo; 
+3

如果你改變了這一輕微3 *輪(myNum的/ 3.0),你必須每個下限分組顯示你。 – DBMarcos99 2009-07-16 11:53:49

2

我不知道如果這適用於mySql,無論如何在SQL Server中,我認爲你可以「簡單地」在選擇列表和分組依據列表中使用group by。

喜歡的東西:

select 
    CASE 
     WHEN id <= 20 THEN 'lessthan20' 
     WHEN id > 20 and id <= 30 THEN '20and30' ELSE 'morethan30' END, 
    count(*) 
from Profiles 
where 1=1 
group by 
    CASE 
     WHEN id <= 20 THEN 'lessthan20' 
     WHEN id > 20 and id <= 30 THEN '20and30' ELSE 'morethan30' END 

回報像

column1  column2  
---------- ---------- 
20and30  3   
lessthan20 3   
morethan30 13   
+0

我不確定這是否也可以在MySQL中工作,但它存在的問題是僅限於您定義的組,而不是覆蓋每個發生的三個範圍(沒有,例如,如果值增加,則定義334個案例到1000,然後希望1002從不出現)。 – 2008-10-13 14:40:07