是否可以构建查询以根据多个条件创建多个列并按时间聚合。例如一个简单的表:
id value created
1 45 datetime
2 52 datetime
3 24 datetime
4 33 datetime
5 20 datetime
我可以得到一年中每周10到20之间的所有值,如下所示:
SELECT count(*) as '10-20', week(created) as 'week', year(created) as 'year'
FROM table
WHERE value > 10 AND value < 20
GROUP BY year(created), week(created)
这将举例说明:
10-20 week year
40 1 2014
21 2 2014
3 33 2014
我可以重复范围20-30
,30-40
,40-50
的查询并手动加入输出但是我想要将这些组合成表格的单个查询,因此输出会是:
10-20 20-30 30-40 40-50 week year
40 0 33 42 1 2014
21 1 0 2 1 2014
0 0 32 0 12 2014
3 42 34 32 33 2014
答案 0 :(得分:1)
您可以使用SUM而不是COUNT,在和的括号内使用IF
像这样的东西
SELECT SUM(IF(value > 10 AND value < 20), 1, 0) as '10-20',
SUM(IF(value > 20 AND value < 30), 1, 0) as '20-30',
SUM(IF(value > 30 AND value < 40), 1, 0) as '30-40',
SUM(IF(value > 40 AND value < 50), 1, 0) as '40-50',
week(created) as 'week', year(created) as 'year'
FROM table
WHERE
GROUP BY year(created), week(created)
请注意,此处(以及您的原始代码中)有一个值在边框上的项目(例如,如果为20)存在问题。
灵活性方面你可能会更好地使用另一个存储范围的表,加入它以获得每周/每年范围一行,然后将行转换为脚本中的列。添加范围时保存修改代码。