[LeetCode MySQL] 1179. Reformat Department Table

2021. 1. 11. 23:00Today I Learned.../MySQL

1179. Reformat Department Table

Table: Department

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| revenue       | int     |
| month         | varchar |
+---------------+---------+
(id, month) is the primary key of this table.
The table has information about the revenue of each department per month.
The month has values in ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].

Write an SQL query to reformat the table such that there is a department id column and a revenue column for each month.

 

The query result format is in the following example:

Department table:
+------+---------+-------+
| id   | revenue | month |
+------+---------+-------+
| 1    | 8000    | Jan   |
| 2    | 9000    | Jan   |
| 3    | 10000   | Feb   |
| 1    | 7000    | Feb   |
| 1    | 6000    | Mar   |
+------+---------+-------+

Result table:
+------+-------------+-------------+-------------+-----+-------------+
| id   | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |
+------+-------------+-------------+-------------+-----+-------------+
| 1    | 8000        | 7000        | 6000        | ... | null        |
| 2    | 9000        | null        | null        | ... | null        |
| 3    | null        | 10000       | null        | ... | null        |
+------+-------------+-------------+-------------+-----+-------------+

Note that the result table has 13 columns (1 for the department id + 12 for the months).

 

QUERY 1

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

QUERY 2

select 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_Revenue
from department
group by id

Reference: LeetCode 1179. Reformat Department Table