【发布时间】:2010-09-16 20:56:32
【问题描述】:
给定一个包含数字字段 (mynum) 的表 (mytable),如何编写一个 SQL 查询来根据该字段中的值范围而不是每个不同的值来汇总表的数据?
为了一个更具体的例子,让我们把它设为 3 的间隔,并用一个 count(*) 来“总结”,这样结果就会告诉 mynum 为 0-2.99 的行数,行数哪里是 3-5.99,哪里是 6-8.99,等等。
【问题讨论】:
给定一个包含数字字段 (mynum) 的表 (mytable),如何编写一个 SQL 查询来根据该字段中的值范围而不是每个不同的值来汇总表的数据?
为了一个更具体的例子,让我们把它设为 3 的间隔,并用一个 count(*) 来“总结”,这样结果就会告诉 mynum 为 0-2.99 的行数,行数哪里是 3-5.99,哪里是 6-8.99,等等。
【问题讨论】:
这个想法是计算在你想要的每个组中具有恒定值的字段的一些函数:
select count(*), round(mynum/3.0) foo from mytable group by foo;
【讨论】:
我不知道这是否适用于 mySql,无论如何在 SQL Server 中,我认为您可以在选择列表和分组列表中“简单地”使用分组。
类似:
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
【讨论】: