我有一个表(tbl_people),此表中我有一个时间字段我想组和10岁组数的记录...结果应该是这样的:
| 数| 年|
| 1000 | 1980-1989年|
| 250 | 1990-1999 |
我可以编写多个查询来做到这一点,但这意味着我必须为每个范围编写不同的查询。有没有一种方法可以从最小的年份开始(十年间隔)动态递增并计算间隔内的记录数?
首先计算每一行的十年
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)