groupby以后为什么需要用sum()等聚合函数取数?

今天刷leetcode的sql题目,遇到一道题,
、、、

相当于要格式化整个列表,行转列。自然想到用id分组。
先放答案:

select id,
sum(case when month='Jan' then revenue end) Jan_Revenue,
sum(case when month='Feb' then revenue end) Feb_Revenue,
sum(case when month='Mar' then revenue end) Mar_Revenue,
sum(case when month='Apr' then revenue end) Apr_Revenue,
sum(case when month='May' then revenue end) May_Revenue,
sum(case when month='Jun' then revenue end) Jun_Revenue,
sum(case when month='Jul' then revenue end) Jul_Revenue,
sum(case when month='Aug' then revenue end) Aug_Revenue,
sum(case when month='Sep' then revenue end) Sep_Revenue,
sum(case when month='Oct' then revenue end) Oct_Revenue,
sum(case when month='Nov' then revenue end) Nov_Revenue,
sum(case when month='Dec' then revenue end) Dec_Revenue
from Department
group by id

注意到不能直接select需要的数据,而是需要加上sum,但实际上sum下都只有一条结果,为什么要这么做?

原因在于,原表进行group分组后,每条id下至多有12条结果,这时候,id列可以直接select,而revenue列不可以,只有聚合函数得出一条结果才可以被select,所以这里,用sum(),max()都可以,目的就是用case when筛出符合条件的那一条结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值