每月MySQL SUM量,按类别分组

时间:2019-04-03 09:55:00

标签: mysql

我有桌子: 用户nvarchar(30) 日期datetime 总小数(8,2)

我需要每月获取以下数据: enter image description here

我可以这样(没有月份列)来获取它:

SELECT User, MONTHNAME(FROM_UNIXTIME(Date)) as month, SUM(Total) as total FROM `wp_banking_expenses` group by month,User

但是我需要它像上面的图像那样做...

2 个答案:

答案 0 :(得分:1)

使用conditional aggregation使用case when expression

select user,max(case when month='January' then total end) as Jan,
max(case when month='February' then total end) as Feb,
max(case when month='March' then total end) as Mar,
max(case when month='April' then total end) as Apr,
max(case when month='May' then total end) as May,
max(case when month='June' then total end) as June,
----
from
(
SELECT User, MONTHNAME(Date) as month, SUM(Total) as total
FROM `wp_banking_expenses` 
group by month,User
)A group by user

答案 1 :(得分:1)

您可以尝试使用条件汇总功能。

SELECT  User, 
        SUM(CASE WHEN MONTHNAME(Date) =  'January' THEN Total END) as Jan, 
        SUM(CASE WHEN MONTHNAME(Date) =  'February' THEN Total END) as Feb,
        SUM(CASE WHEN MONTHNAME(Date) =  'March' THEN Total END) as Mar,
        SUM(CASE WHEN MONTHNAME(Date) =  'April' THEN Total END) as Apr,
        SUM(CASE WHEN MONTHNAME(Date) =  'May' THEN Total END) as May,
        SUM(CASE WHEN MONTHNAME(Date) =  'June' THEN Total END) as JUN,
        SUM(CASE WHEN MONTHNAME(Date) =  'July' THEN Total END) as JUL, 
        SUM(CASE WHEN MONTHNAME(Date) =  'August' THEN Total END) as AUG,
        SUM(CASE WHEN MONTHNAME(Date) =  'September' THEN Total END) as SEP,
        SUM(CASE WHEN MONTHNAME(Date) =  'October' THEN Total END) as OCT,
        SUM(CASE WHEN MONTHNAME(Date) =  'November' THEN Total END) as NOV,
        SUM(CASE WHEN MONTHNAME(Date) =  'December' THEN Total END) as DEC
FROM `wp_banking_expenses` 
group by User