2008-10-13 145 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