Problem solving/DataBase
[LeetCode] 1179. Reformat Department Table (Oracle)
Young_A
2021. 1. 11. 07:42
LeetCode - Problems - Database - 1179. Reformat Department Table
더보기
Given SQL Schema
Create table If Not Exists Department (id int, revenue int, month varchar(5))
Truncate table Department
insert into Department (id, revenue, month) values ('1', '8000', 'Jan')
insert into Department (id, revenue, month) values ('2', '9000', 'Jan')
insert into Department (id, revenue, month) values ('3', '10000', 'Feb')
insert into Department (id, revenue, month) values ('1', '7000', 'Feb')
insert into Department (id, revenue, month) values ('1', '6000', 'Mar')
Problem Description
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:
My Solution (Oracle)
각 부서는 id로 구분되고, id와 month가 primary key가 되어서 하나의 row가 되어서 등록 되어있는 상태.
각 부서별 1년 revenue를 a row로 확인하기 위해 id, 월별 revenue 총 13개의 column으로 이루어진 형식으로 테이블을 reformat해서 요청하는 query를 작성해야 한다.
SELECT id,
MAX(CASE WHEN month='Jan' THEN revenue ELSE null END) as Jan_Revenue,
MAX(CASE WHEN month='Feb' THEN revenue ELSE null END) as Feb_Revenue,
MAX(CASE WHEN month='Mar' THEN revenue ELSE null END) as Mar_Revenue,
MAX(CASE WHEN month='Apr' THEN revenue ELSE null END) as Apr_Revenue,
MAX(CASE WHEN month='May' THEN revenue ELSE null END) as May_Revenue,
MAX(CASE WHEN month='Jun' THEN revenue ELSE null END) as Jun_Revenue,
MAX(CASE WHEN month='Jul' THEN revenue ELSE null END) as Jul_Revenue,
MAX(CASE WHEN month='Aug' THEN revenue ELSE null END) as Aug_Revenue,
MAX(CASE WHEN month='Sep' THEN revenue ELSE null END) as Sep_Revenue,
MAX(CASE WHEN month='Oct' THEN revenue ELSE null END) as Oct_Revenue,
MAX(CASE WHEN month='Nov' THEN revenue ELSE null END) as Nov_Revenue,
MAX(CASE WHEN month='Dec' THEN revenue ELSE null END) as Dec_Revenue
FROM department
GROUP BY id;
나는 간단하게 SELECT query를 이용해서 풀었다.
CASE 문을 이용해 month 를 확인하고 없다면 null을 출력하도록 했다.
MAX 함수는 사실 반드시 필요한 것은 아닌데 GROUP BY 문을 이용하기 위해 사용했다.
실행 결과 다른 제출들보다 98.69% 빠른 속도로 실행된다.
나중에 JOIN을 이용해서 제출해봐야겠다.