当前位置:网站首页>数据库每日一题---第24天:格式化部门表
数据库每日一题---第24天:格式化部门表
2022-07-16 09:46:00 【InfoQ】
一、问题描述
部门表
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个月份的收入列)。
考察
1.聚合函数、case语句
2.建议用时10~25min
三、问题分析
题目要求我们求出每个用户编号在
12个月的工资,没有工资的置为
null,注意题目中每一行包含重复的编号,输出的结果包含
id应该有
13
列。
这一题我们可以用
case 变量 when 条件 then 结果1 else 结果2
这样的代码前来处理,对于每个月总体的薪资,先对
id编号进行聚合分组,然后使用
sum函数计算每个月薪资的总和。
四、编码实现
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_Revenue
from Department
group by id
五、测试结果



边栏推荐
猜你喜欢
随机推荐
Jitsi manu install (III)
The difference between query string, formdata and request payload
[QNX hypervisor 2.2 user manual]8.2 guest exit
English语法_人称代词
Niuke - Huawei question bank (81~90)
Logstash filtering rules for elk cluster deployment (9)
What are the key smart contracts in defi?
学习笔记——直流电机调速器
剑指 Offer 09. 用两个栈实现队列
Selenium八大元素定位及相对定位器
[QNX Hypervisor 2.2用户手册]8.2 Guest退出
行政处罚法 例外规定
C serial port and TCP client sttech BytesIO
[QNX hypervisor 2.2 user manual]8.1 overhead in virtual environment
【今天的小go同学要去丢垃圾(1)】
Several calling methods of Oracle stored procedure
总结:Prometheus匹配模式
pmp证书有用么?
【今天的小go同学要去丢垃圾(2)】
list map基础笔记记录








