SQL实用题型-列转行

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

1. 理解列转行

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

year month amount
2018 1 20
2018 2 90
2018 3 50
2018 4 30
2018 1 20
2019 2 60
2019 3 10
2019 4 10

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

year m1 m2 m3 m4
2018 40 90 50 30
2019 0 60 10 10

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

2.sql实现

思路:

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

注:记得要写 END

你可能感兴趣的:(SQL实用题型整理,sql)