JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2023-02-08
目录

重新格式化部门表Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

部门表 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个月份的收入列)。

# 思路

# 解法


# Write your MySQL query statement below

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`
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式