SQL分组:使用分组数据创建每月列

时间:2016-12-13 14:33:13

标签: mysql

我有以下mySQL查询,该查询生成一个表,按不同类型的故障的月份和频率列出各个故障数据和组。

SELECT (CASE WHEN MONTH(runtable.time) = 1 THEN 'Jan'
WHEN MONTH(runtable.time) = 2 THEN 'FEB'
WHEN MONTH(runtable.time) = 3 THEN 'MAR'
WHEN MONTH(runtable.time) = 4 THEN 'APR'
WHEN MONTH(runtable.time) = 5 THEN 'MAY'
WHEN MONTH(runtable.time) = 6 THEN 'JUN'
WHEN MONTH(runtable.time) = 7 THEN 'JUL'
WHEN MONTH(runtable.time) = 8 THEN 'AUG'
WHEN MONTH(runtable.time) = 9 THEN 'SEP'
WHEN MONTH(runtable.time) = 10 THEN 'OCT'
WHEN MONTH(runtable.time) = 11 THEN 'NOV'
WHEN MONTH(runtable.time) = 12 THEN 'DEC'
ELSE 'Error' END) as date_month, runtable.operation, pareto.failure
FROM runtable
JOIN pareto ON pareto.run_id = runtable.id
WHERE runtable.time BETWEEN '2016-01-01 00:00:00' AND '2016-12-13 23:59:59'     
AND runtable.operation IN ('d','hr')
GROUP BY MONTH(runtable.time), pareto.failure
ORDER BY MONTH(runtable.time) desc, n desc;

我希望能够将这些月份作为表中的单独列以及年份的总数,但我不知道如何执行此操作。我目前的问题是我尝试这样做的唯一方法,包括每个月使用总和或案例,但后来我无法将每个月的不同故障类型的数量分组在一起。

2 个答案:

答案 0 :(得分:0)

这种方式正是您所描述的:您需要使用CASE WHEN和SUM函数来解决此问题。看一下这个帖子:

how to select 2 table like this

顺便说一句,您有更简单的方法来描述没有案例函数的月份作为示例代码。看看:

MySQL DATE_FORMAT() Function

类似于:select DATE_FORMAT(now(),'%m')

我没有理解你的错误列的问题。请说明您遇到的问题。

祝你好运!

答案 1 :(得分:0)

据我所知,你每个月都在寻找总和(pareto.failues)。

在此处查看:http://rextester.com/MTDK27603

>>> plain_hex = hex(plainInt)
>>> print plain_hex
0x737461636b6f766572666c6f77L
>>> str(plain_hex)[2:-1].decode('hex')
'stackoverflow'