SQL实用题型-列转行

面试的时候被问到的,第一想法是python里面pandas的用法,然后完全想不到sql要怎么做,现在来总结一下。

1. 理解列转行

假定我们有一个长数据表如下:
table:

yearmonthamount
2018120
2018290
2018350
2018430
2018120
2019260
2019310
2019410

想要实现列转行,把长数据变成宽数据,即将month中的类别全部变成单变量,其对应的元素即为amunt的统计数量
如下表:

yearm1m2m3m4
201840905030
20190601010

所以实际上做的事情就是聚合分组。

2.sql实现

思路:

  1. 对year进行group by
  2. 对month进行判断,生成新的列属性
    代码如下:
SELECT year,
	SUM(CASE WHEN month = 1 THEN amount ELSE 0 END) as m1,
	SUM(CASE WHEN month = 2 THEN amount ELSE 0 END) as m2,
	SUM(CASE WHEN month = 3 THEN amount ELSE 0 END) as m3,
	SUM(CASE WHEN month = 4 THEN amount ELSE 0 END) as m4,
FROM table
GROUP BY year

注:记得要写 END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值