我有一个表(tbl_people),在这个表中我有一个日期时间字段,我想分组并计算 10 年为一组的记录......结果应该是这样的:
| 计数 | 年份 |
| 1000 | 1980-1989 |
| 250 | 1990-1999 |
我可以编写多个查询来做到这一点,但这意味着我必须为每个范围编写不同的查询。有没有办法从最少的年份(10 年的间隔)动态递增并计算间隔内的记录数?
问问题
4702 次
3 回答
5
首先计算每一行的十年
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
于 2012-12-08T17:50:13.793 回答
0
这应该可以工作 - 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
和 times 10
=的2000
相同之处,减号1
,1999
所以year
应该是1990-1999
。
于 2012-12-08T17:17:35.677 回答
0
这会有所帮助。
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;
于 2012-12-08T18:18:40.743 回答