Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按年度波段间隔分组行_Mysql_Group By - Fatal编程技术网

Mysql 按年度波段间隔分组行

Mysql 按年度波段间隔分组行,mysql,group-by,Mysql,Group By,我有一个表(tbl_people),在这个表中我有一个datetime字段,我想分组,并以10年为一组计算记录。。。结果应该是这样的: |计数|年| |1000 | 1980-1989 | |250 | 1990-1999 | 我可以编写多个查询来完成它,但这意味着我必须为每个范围编写不同的查询。是否有一种方法可以从最短的一年(10年间隔)开始动态递增,并计算间隔内的记录数?这应该可以工作(感谢Olaf Dietsche向我展示了这个奇妙的网站的存在): select CONCAT(FLOO

我有一个表(tbl_people),在这个表中我有一个datetime字段,我想分组,并以10年为一组计算记录。。。结果应该是这样的:
|计数|年|
|1000 | 1980-1989 |
|250 | 1990-1999 |

我可以编写多个查询来完成它,但这意味着我必须为每个范围编写不同的查询。是否有一种方法可以从最短的一年(10年间隔)开始动态递增,并计算间隔内的记录数?

这应该可以工作(感谢Olaf Dietsche向我展示了这个奇妙的网站的存在):

 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;

如果数字是1992,
FLOOR(1992/10)
将给出
199
,带有
10
的时间将给出
1990
。关于CEIL(1992/10)=
200
和时间
10
=
2000
,减去
1
,得到
1999
,所以
年应该是
1990-1999
首先计算每行的十年

select floor(year(`year`) / 10) * 10 as decade
from tbl_people
 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;
然后用这个中间结果进行计数

 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;
或者这个,如果你想把十年放在一列的话

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
 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;

这会有帮助

 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;

我需要从表中选择最小年份。然后在此基础上创建乐队。奥拉夫的答案就是这样。