持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
leetcode刷题1179-重新格式化的部门表
前文
本文内容为leetcode数据库类型题目,主要考查对于查询相关知识的掌握。本文解题方案为个人理解,并非最佳解决方案。该题目序号为1179,题目链接为leetcode.cn/problems/re…
题目信息
部门表 Department:
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| revenue | int |
| month | varchar |
+---------------+---------+
(id, month) 是表的联合主键。 这个表格有关于每个部门每月收入的信息。 月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。
编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。
题目分析
根据题目要求,我们拥有一张部门表,部门表中包含了每个月每个部门的收入。由于当前表格是纵向的,而题目希望我们将表调整为横向。处理后每个部门id会对应这个部门每个月的收入和。很容易想到我们需要采用group by对于表进行分组,分组的内容为部门的id。通过对于部门id的分组后的聚合,得到我们每个月每个部门的收入。而在获取收入时,我们需要考虑到12个月的情况,采用条件控制语句,根据不同的月份,聚合成不同的字段。按照这种方式,达到题目的目标要求。至此,该题目解决完毕。
解题答案
# Write your MySQL query statement below
select id,
sum(case month when 'Jan' then revenue end) as Jan_Revenue,
sum(case month when 'Feb' then revenue end) as Feb_Revenue,
sum(case month when 'Mar' then revenue end) as Mar_Revenue,
sum(case month when 'Apr' then revenue end) as Apr_Revenue,
sum(case month when 'May' then revenue end) as May_Revenue,
sum(case month when 'Jun' then revenue end) as Jun_Revenue,
sum(case month when 'Jul' then revenue end) as Jul_Revenue,
sum(case month when 'Aug' then revenue end) as Aug_Revenue,
sum(case month when 'Sep' then revenue end) as Sep_Revenue,
sum(case month when 'Oct' then revenue end) as Oct_Revenue,
sum(case month when 'Nov' then revenue end) as Nov_Revenue,
sum(case month when 'Dec' then revenue end) as Dec_Revenue
from Department
group by id
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。