【问题标题】:Group rows by Year Band Interval按年段间隔对行进行分组
【发布时间】:2012-12-08 17:12:12
【问题描述】:

我有一个表 (tbl_people),在这个表中我有一个日期时间字段,我想对 10 年为一组的记录进行分组和计数...结果应该类似于:
|计数   |年           |
| 1000     | 1980-1989 |
| 250       | 1990-1999 |

我可以编写多个查询来做到这一点,但这意味着我必须为每个范围编写不同的查询。有没有办法从最少年份向上(10 年间隔)动态递增并计算间隔内的记录数?

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    首先计算每一行的十年

    select floor(year(`year`) / 10) * 10 as decade
    from tbl_people
    

    然后使用这个中间结果来计数SQL Fiddle

    select count(*), decade, decade + 9
    from (select floor(year(`year`) / 10) * 10 as decade
          from tbl_people) t
    group by decade
    

    或者这个SQL Fiddle,如果你想在一栏中包含十年

    select count(*) as count, concat(decade, '-', decade + 9) as year
    from (select floor(year(`year`) / 10) * 10 as decade
          from tbl_people) t
    group by decade
    

    【讨论】:

      【解决方案2】:

      这会有所帮助。

       select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from 
          TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;
      

      【讨论】:

        【解决方案3】:

        这应该可行 - SQL Fiddle(感谢 Olaf Dietsche 向我展示了这个美妙的网站存在):

        SELECT
            COUNT(`year`) as `count`,
            CONCAT(
                FLOOR(YEAR(`year`) / 10) * 10, 
                '-', 
                (CEIL(YEAR(`year`) / 10) * 10) - 1
            ) as `year`
        FROM
            `tbl_people`
        GROUP BY
            CONCAT(
                FLOOR(YEAR(`year`) / 10) * 10,
                '-', 
                (CEIL(YEAR(`year`) / 10) * 10) - 1
            )
        

        如果数字是 1992,FLOOR(1992 / 10) 将给出199,与10 的时间将给出1990。同样的事情 CEIL(1992 / 10) = 200 和时间 10 = 2000,减去 1,得到 1999,所以 year 应该是 1990-1999

        【讨论】:

        • 我需要从表格中选择最小年份。然后在此基础上创建乐队。奥拉夫的回答做到了。
        猜你喜欢
        • 2016-06-13
        • 2019-01-30
        • 2016-04-02
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多