[mysql]创建列在哪里每条

标签: sql MySQL
发布时间: 2015/6/11 7:42:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

由时间,它可能会建立一个查询,以创建多个列基于多个条件和集料。例如,一个简单的表像这样:

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-3030-4040-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

解决方法 1:

你可以用笔而不是计数,用一个 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)。

灵活聪明,你可能会更好地与另一个表存储范围,加入那个去获取一行每个范围每周 / 年,然后打开您的脚本中的列的行。保存修改代码时添加范围。

官方微信
官方QQ群
31647020