Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 신입 데이터분석가
- python
- 누적합
- 프로그래머스
- advent of sql
- 린분석
- 데이터리안
- 퍼널분석
- 순위함수
- row_number
- 윈도우 함수
- dense_rank
- SolveSQL
- 독서
- regexp
- 서브쿼리
- 취준
- LEFTJOIN
- leetcode
- 그로스해킹
- MYSQL
- Retention
- SQL
- rank
- 리텐션
- 윈도우함수
- Datarian
- pandas
- funnel
- 데이터분석
Archives
- Today
- Total
데이터 분석
1179. Reformat Department Table | Easy 본문
문제
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.

Solution
✅ 제공 테이블의 id, month, revenue 데이터를 가지고, 각 month를 열로 변환하여 revenue 데이터를 각 열에 맞게 매핑해야 하는 문제이다.
👉 CASE문과 집계 함수(MAX, SUM, ... )를 조합하여 피봇 테이블을 구현한다.
● 1
SELECT id
, MAX(CASE WHEN month = 'Jan' THEN revenue END) AS Jan_Revenue
, MAX(CASE WHEN month = 'Feb' THEN revenue END) AS Feb_Revenue
, MAX(CASE WHEN month = 'Mar' THEN revenue END) AS Mar_Revenue
, MAX(CASE WHEN month = 'Apr' THEN revenue END) AS Apr_Revenue
, MAX(CASE WHEN month = 'May' THEN revenue END) AS May_Revenue
, MAX(CASE WHEN month = 'Jun' THEN revenue END) AS Jun_Revenue
, MAX(CASE WHEN month = 'Jul' THEN revenue END) AS Jul_Revenue
, MAX(CASE WHEN month = 'Aug' THEN revenue END) AS Aug_Revenue
, MAX(CASE WHEN month = 'Sep' THEN revenue END) AS Sep_Revenue
, MAX(CASE WHEN month = 'Oct' THEN revenue END) AS Oct_Revenue
, MAX(CASE WHEN month = 'Nov' THEN revenue END) AS Nov_Revenue
, MAX(CASE WHEN month = 'Dec' THEN revenue END) AS Dec_Revenue
FROM Department
GROUP BY id
💡동작원리
- id = 1 인 원본 row
| 1 | 8000 | Jan |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
- CASE 구문 동작
| 1 | 8000 |
| 1 | NULL |
| 1 | NULL |
- MAX 집계함수 & GROUP BY 동작
| 1 | 8000 |
● 2
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
● 3
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'SQL > leetcode' 카테고리의 다른 글
| 550. Game Play Analysis IV | Medium💡 (2) | 2025.01.21 |
|---|---|
| 262. Trips and Users | Hard 🔥 (2) | 2025.01.21 |
| 184. Department Highest Salary | Medium📌 (1) | 2025.01.10 |
| 181. Employees Earning More Than Their Managers | Easy📌 (4) | 2025.01.10 |
| 183. Customers Who Never Order | Easy (1) | 2025.01.10 |