按间隔分组

Dav*_*man 10 mysql sql

给定一个包含数字字段(mynum)的表(mytable),如何编写一个SQL查询,根据该字段中的值范围而不是每个不同的值来汇总表的数据?

为了一个更具体的例子,让我们将它的间隔设为3,并用count(*)进行"汇总",这样结果就会告诉mynum为0-2.99的行数,它是3的行数. -5.99,其中6-8.99等

Jou*_*nen 15

我们的想法是计算在您想要的每个组中具有恒定值的字段的某些功能:

select count(*), round(mynum/3.0) foo from mytable group by foo;
Run Code Online (Sandbox Code Playgroud)

  • 如果您稍微将其更改为3*round(mynum/3.0),则会显示为您显示的每个分组的下限. (4认同)

ila*_*ila 5

我不知道这是否适用于 mySql,无论如何在 SQL Server 中,我认为您可以在选择列表和 group by 列表中“简单地”使用 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
Run Code Online (Sandbox Code Playgroud)

返回类似的东西

 column1     column2    
 ----------  ---------- 
 20and30     3          
 lessthan20  3          
 morethan30  13         
Run Code Online (Sandbox Code Playgroud)