按年段间隔对行进行分组

IRO*_*GBU 4 mysql group-by

我有一个表(tbl_people),此表中我有一个时间字段我想组和10岁组数的记录...结果应该是这样的:
| 数| 年|
| 1000 | 1980-1989年|
| 250 | 1990-1999 |

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

Ola*_*che 5

首先计算每一行的十年

select floor(year(`year`) / 10) * 10 as decade
from tbl_people
Run Code Online (Sandbox Code Playgroud)

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

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

或此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
Run Code Online (Sandbox Code Playgroud)