【问题标题】:Grouping by intervals按间隔分组
【发布时间】:2010-09-16 20:56:32
【问题描述】:

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

为了一个更具体的例子,让我们把它设为 3 的间隔,并用一个 count(*) 来“总结”,这样结果就会告诉 mynum 为 0-2.99 的行数,行数哪里是 3-5.99,哪里是 6-8.99,等等。

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    这个想法是计算在你想要的每个组中具有恒定值的字段的一些函数:

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

    【讨论】:

    • 如果您将其稍微更改为 3*round(mynum/3.0) 您将显示每个分组的下限。
    【解决方案2】:

    我不知道这是否适用于 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         
    

    【讨论】:

    • 我不确定这是否也适用于 MySQL,但它的问题是仅限于您定义的组,而不是涵盖发生的三个组的每个范围(例如,没有定义334 例,如果您的值上升到 1000,那么希望 1002 永远不会出现)。
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2011-02-08
    • 2019-06-28
    • 2018-10-12
    • 2015-03-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多