LeetCode(数据库)- 重新格式化部门表

简介: LeetCode(数据库)- 重新格式化部门表

题目链接:点击打开链接

题目大意:略。

解题思路(1)

第一步 列拆成行

首先,根据题意,需要将revenue根据month拆成,结果如下表,有两种方式,CASE WHEN或者IF语句。

SELECTid,
CASE`month`WHEN'Jan'THENrevenueENDJan_Revenue,
CASE`month`WHEN'Feb'THENrevenueENDFeb_Revenue,
CASE`month`WHEN'Mar'THENrevenueENDMar_Revenue,
CASE`month`WHEN'Apr'THENrevenueENDApr_Revenue,
CASE`month`WHEN'May'THENrevenueENDMay_Revenue,
CASE`month`WHEN'Jun'THENrevenueENDJun_Revenue,
CASE`month`WHEN'Jul'THENrevenueENDJul_Revenue,
CASE`month`WHEN'Aug'THENrevenueENDAug_Revenue,
CASE`month`WHEN'Sep'THENrevenueENDSep_Revenue,
CASE`month`WHEN'Oct'THENrevenueENDOct_Revenue,
CASE`month`WHEN'Nov'THENrevenueENDNov_Revenue,
CASE`month`WHEN'Dec'THENrevenueENDDec_RevenueFROMDepartment;
SELECTid,
IF(`month`='Jan',revenue,NULL) Jan_Revenue,
IF(`month`='Feb',revenue,NULL) Feb_Revenue,
IF(`month`='Mar',revenue,NULL) Mar_Revenue,
IF(`month`='Apr',revenue,NULL) Apr_Revenue,
IF(`month`='May',revenue,NULL) May_Revenue,
IF(`month`='Jun',revenue,NULL) Jun_Revenue,
IF(`month`='Jul',revenue,NULL) Jul_Revenue,
IF(`month`='Aug',revenue,NULL) Aug_Revenue,
IF(`month`='Sep',revenue,NULL) Sep_Revenue,
IF(`month`='Oct',revenue,NULL) Oct_Revenue,
IF(`month`='Nov',revenue,NULL) Nov_Revenue,
IF(`month`='Dec',revenue,NULL) Dec_RevenueFROMDepartment;
+------+-------------+-------------+-------------+-----+-------------+|id|Jan_Revenue|Feb_Revenue|Mar_Revenue| ... |Dec_Revenue|+------+-------------+-------------+-------------+-----+-------------+|1|null|7000|null| ... |null||3|null|10000|null| ... |null||1|8000|null|null| ... |null||2|9000|null|null| ... |null||1|null|null|6000| ... |null|+------+-------------+-------------+-------------+-----+-------------+

第二步 行合并

其次,根据题意,需要根据id,将相同id的行进行合并,结果如下表,采用分组的方式,可以对各月收入列求和(SUM)也可以求最大值(MAX)。

SELECTid,
SUM(CASE`month`WHEN'Jan'THENrevenueEND) Jan_Revenue,
SUM(CASE`month`WHEN'Feb'THENrevenueEND) Feb_Revenue,
SUM(CASE`month`WHEN'Mar'THENrevenueEND) Mar_Revenue,
SUM(CASE`month`WHEN'Apr'THENrevenueEND) Apr_Revenue,
SUM(CASE`month`WHEN'May'THENrevenueEND) May_Revenue,
SUM(CASE`month`WHEN'Jun'THENrevenueEND) Jun_Revenue,
SUM(CASE`month`WHEN'Jul'THENrevenueEND) Jul_Revenue,
SUM(CASE`month`WHEN'Aug'THENrevenueEND) Aug_Revenue,
SUM(CASE`month`WHEN'Sep'THENrevenueEND) Sep_Revenue,
SUM(CASE`month`WHEN'Oct'THENrevenueEND) Oct_Revenue,
SUM(CASE`month`WHEN'Nov'THENrevenueEND) Nov_Revenue,
SUM(CASE`month`WHEN'Dec'THENrevenueEND) Dec_RevenueFROMDepartmentGROUPBYid;
+------+-------------+-------------+-------------+-----+-------------+|id|Jan_Revenue|Feb_Revenue|Mar_Revenue| ... |Dec_Revenue|+------+-------------+-------------+-------------+-----+-------------+|1|8000|7000|6000| ... |null||2|9000|null|null| ... |null||3|null|10000|null| ... |null|+------+-------------+-------------+-------------+-----+-------------+

解题思路(2)

目录
相关文章
|
存储 SQL 关系型数据库
OceanBase数据库并没有类似于传统关系型数据库中的"SET COL"这样的格式化命令
OceanBase数据库并没有类似于传统关系型数据库中的"SET COL"这样的格式化命令
88 1
【Leetcode -461.汉明距离 -482.密钥格式化】
【Leetcode -461.汉明距离 -482.密钥格式化】
48 0
|
2月前
|
关系型数据库 MySQL 数据处理
prettytable:像数据库一样格式化输出内容
prettytable:像数据库一样格式化输出内容
35 0
|
4月前
|
数据库
uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)
uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)
167 0
|
存储 SQL 关系型数据库
OceanBase数据库并没有类似于传统关系型数据库中的"SET COL"这样的格式化命令
OceanBase数据库并没有类似于传统关系型数据库中的"SET COL"这样的格式化命令
111 1
|
6月前
|
资源调度 前端开发 Java
前后端、数据库时间格式化方法
前后端、数据库时间格式化方法
|
6月前
leetcode-1694:重新格式化电话号码
leetcode-1694:重新格式化电话号码
50 0
|
6月前
|
SQL 算法 vr&ar
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
|
JavaScript 前端开发
leetcode 1418.点菜展示表(JavaScript)
leetcode 1418.点菜展示表(JavaScript)
42 0
leetcode-每日一题731. 我的日程安排表 II
题目需要我们判断在重复的预定时间里,有三重预定的返回false,那我们可以定义一个pair结构体用来表示时间段,MyCalendarTwo结构体用来存成功预定的时间段booked切片,和有重复预定的时间段overlaps切片,overlaps切片用来判断新进的时间段是否跟overlaps有重合预定的情况,若有则返回false,没有则true
109 0
leetcode-每日一题731. 我的日程安排表 II