Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

데이터 분석가로 살아남기

[LeetCode] 1179. Reformat Department Table - MySQL 풀이 본문

SQL

[LeetCode] 1179. Reformat Department Table - MySQL 풀이

junbro 2023. 5. 30. 23:43

안녕하세요, 준브로입니다. 

이번에 풀어볼 문제는 SQL 쿼리로 피봇 테이블을 연습해볼 수 있는 Leetcode의 1179. Reformat Department Table 문제를 풀어보겠습니다. 

 

문제 설명 

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')

 

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

Return the result table in any order.

The query result format is in the following example.

 

문제 해석

  • Department 테이블에는 부서별 id, revenue, month 정보가 포함되어 있습니다. 
  • 부서별 id 컬럼과 월별 매출액 정보를 볼 수 있도록 리포맷 하는 문제입니다. 
  • CASE 문을 이용하여 피봇테이블을 시행하는 SQL 쿼리로 문제를 해결합시다.

문제 풀이

SELECT id
     , SUM(CASE WHEN month = 'Jan' THEN revenue END) AS Jan_Revenue
     , SUM(CASE WHEN month = 'Feb' THEN revenue END) AS Feb_Revenue
     , SUM(CASE WHEN month = 'Mar' THEN revenue END) AS Mar_Revenue
     , SUM(CASE WHEN month = 'Apr' THEN revenue END) AS Apr_Revenue
     , SUM(CASE WHEN month = 'May' THEN revenue END) AS May_Revenue
     , SUM(CASE WHEN month = 'Jun' THEN revenue END) AS Jun_Revenue
     , SUM(CASE WHEN month = 'Jul' THEN revenue END) AS Jul_Revenue
     , SUM(CASE WHEN month = 'Aug' THEN revenue END) AS Aug_Revenue
     , SUM(CASE WHEN month = 'Sep' THEN revenue END) AS Sep_Revenue
     , SUM(CASE WHEN month = 'Oct' THEN revenue END) AS Oct_Revenue
     , SUM(CASE WHEN month = 'Nov' THEN revenue END) AS Nov_Revenue
     , SUM(CASE WHEN month = 'Dec' THEN revenue END) AS Dec_Revenue
FROM department
GROUP BY id

부서 id별로 월별 매출액 합계를 출력하는 것이기 때문에 'GROUP BY id' 를 해 줍니다. 

또한, CASE 문을 사용하여 각 월에 해당하는 값을 가질 때 revenue를 출력하는 쿼리를 작성해줄 수 있고, 월별로 매출액 합계를 집계하는 함수 SUM으로 묶어줍니다. 

 

 

* CASE WHEN 조건 THEN '조건이 True일 때 출력 값' (ELSE 조건이 False일 때 출력 값) <- 생략 가능 END 

 

위 함수를 실행하면 정상적으로 test case를 통과하고 제출까지 완료되는 것을 확인하실 수 있습니다. 

코드가 길어보이지만, CASE 문을 사용하여 피봇테이블 하는 SQL 쿼리문의 논리를 이해하면서 연습하기 좋은 문제라고 생각합니다. 

 

 

도움이 되셨으면 좋겠습니다. 

 

오늘 포스팅은 마무리하겠습니다. 다음에 뵐게요:)