微众银行笔试 | SQL整理 —— 列转行(2019.9.19)

Content

  • 输入数据
  • 输出效果
  • 思路
  • 代码实现
  • 细节讨论

❤️ 「更多数据分析真题」
数据分析真题日刷 | 目录索引

❤️ 「更多我的秋招经验贴」
2020我的秋招总结帖 [数据分析岗] | 目录索引


一、 输入数据

表due 如下,数据自己生成的 ~

在这里插入图片描述


二、输出效果

在这里插入图片描述


三、思路

  • 在每个year下,对month分情况判断(month=1还是2还是3还是4),输出对应的amount;因此用CASE WHEN语句;
  • 关键点,除了对月份 CASE WHEN 分类判断,还需要对year处理,把同一年的amount 加总,这里用到SUM 和 GROUP BY。没明白没关系,可以转跳第五part 的讨论。

四、代码实现

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 due
GROUP BY year;

五、细节讨论

我们讨论SUMGROUP BY 的作用。

如果是下面这段代码,

SELECT 
	year,
    (CASE WHEN month = 1 THEN amount ELSE 0 END) AS m1,
    (CASE WHEN month = 2 THEN amount ELSE 0 END) AS m2,
    (CASE WHEN month = 3 THEN amount ELSE 0 END) AS m3,
    (CASE WHEN month = 4 THEN amount ELSE 0 END) AS m4
FROM due;

输出效果如下,
在这里插入图片描述

我考场上就是这么写的……,但是这种情况下,会按照每年每月分别一行,而不是按照年合并,因此需要将同一年的amount 加总,即SUM(amount),并且 GROUP BY year

  • 再次体会正确代码
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 due
GROUP BY year;

  • 正确输出
    在这里插入图片描述
  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值