我有一个表(tbl_people),在这个表中我有一个日期时间字段我要分组并计算10年组记录...结果应该是这样的:
|计数|年|
| 1000 | 1980-1989 |
| 250 | 1990-1999 |
我可以编写多个查询来执行此操作,但这意味着我将不得不为每个范围编写不同的查询。有没有办法从最少年份(10年间隔)动态增加并计算间隔内的记录数量?
答案 0 :(得分:4)
首先计算每一行的十年
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
答案 1 :(得分: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
和时间10
= 2000
,减去1
,同样的事情会给出1999
,因此year
应该1990-1999
是{{1}}。
答案 2 :(得分: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;