博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Easy之1179.重新格式化部门表
阅读量:3716 次
发布时间:2019-05-21

本文共 2342 字,大约阅读时间需要 7 分钟。

部门表 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)列。

示例

Department 表:

id revenue month
1 8000 Jan
2 9000 Jan
3 10000 Feb
1 7000 Feb
1 6000 Mar

结果表:

id Jan_Revenue Feb_Revenue Mar_Revenue Dec_Revenue
1 8000 7000 6000 null
2 9000 null null null
3 null 10000 null null

注意,结果表有 13 列 (1个部门 id 列 + 12个月份的收入列)。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/reformat-department-table
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

第一步:列拆成行

需要将revenue列根据month拆成行,有两种方式,CASE WHEN或者IF语句。

第二步:行合并

根据题意,需要根据id,将相同id的行进行合并,结果如下表,采用分组的方式,可以对各月收入列求SUM/MAX/MIN/AVG都可以。

法一:Case When

select id,sum(case month when 'Jan' then revenue else null end) as Jan_Revenue,sum(case month when 'Feb' then revenue else null end) as Feb_Revenue,sum(case month when 'Mar' then revenue else null end) as Mar_Revenue,sum(case month when 'Apr' then revenue else null end) as Apr_Revenue,sum(case month when 'May' then revenue else null end) as May_Revenue,sum(case month when 'Jun' then revenue else null end) as Jun_Revenue,sum(case month when 'Jul' then revenue else null end) as Jul_Revenue,sum(case month when 'Aug' then revenue else null end) as Aug_Revenue,sum(case month when 'Sep' then revenue else null end) as Sep_Revenue,sum(case month when 'Oct' then revenue else null end) as Oct_Revenue,sum(case month when 'Nov' then revenue else null end) as Nov_Revenue,sum(case month when 'Dec' then revenue else null end) as Dec_Revenuefrom departmentgroup by id

法二:IF

select distinct id,    sum(IF(month="Jan",revenue,null)) as Jan_Revenue,    sum(IF(month="Feb",revenue,null)) as Feb_Revenue,    sum(IF(month="Mar",revenue,null)) as Mar_Revenue,    sum(IF(month="Apr",revenue,null)) as Apr_Revenue,    sum(IF(month="May",revenue,null)) as May_Revenue,    sum(IF(month="Jun",revenue,null)) as Jun_Revenue,    sum(IF(month="Jul",revenue,null)) as Jul_Revenue,    sum(IF(month="Aug",revenue,null)) as Aug_Revenue,    sum(IF(month="Sep",revenue,null)) as Sep_Revenue,    sum(IF(month="Oct",revenue,null)) as Oct_Revenue,    sum(IF(month="Nov",revenue,null)) as Nov_Revenue,    sum(IF(month="Dec",revenue,null)) as Dec_Revenuefrom Department group by id order by id;
你可能感兴趣的文章
计网笔记(7)--编码,调制
查看>>
刷题笔记(16)--机器人的运动范围(BFS搜索)
查看>>
mysql笔记(18)--创建表,修改表结构
查看>>
刷题笔记(17)--整数拆分/剪绳子(动态规划)
查看>>
mysql笔记(19)--使用视图
查看>>
刷题笔记(18)--剪绳子II(贪心)
查看>>
mysql笔记(20)--使用存储过程
查看>>
计组笔记(4)--海明校验码
查看>>
刷题笔记(19)--把数组排成最小的数
查看>>
mysql笔记(21)--使用游标
查看>>
搜狗双拼输入法--快速入门
查看>>
刷题笔记(20)--对称的二叉树
查看>>
mysql笔记(22)--使用触发器
查看>>
刷题笔记(21)--平衡二叉树
查看>>
mysql笔记(23)--管理事务处理
查看>>
设计模式笔记--工厂模式
查看>>
mysql笔记(24)--安全管理
查看>>
mysql基础总结
查看>>
Python爬虫之Requests库的下载和安装
查看>>
Python爬虫之Scrapy库的下载和安装
查看>>