📝 1179. Reformat Department Table
🔹 부서 테이블 개혁
매월 부서 ID 열과 수익 열이 있도록 테이블 형식을 다시 지정합니다.
어떤 순서로든 결과 테이블을 반환합니다.
📝 문제 설명
Reformat Department Table(1179번) 문제는 기존의 열과 행 데이터를 피벗(pivot) 방식으로 변환하는 작업입니다. 각 월(Month)에 해당하는 매출(Revenue)을 별도의 열로 나누어 출력해야 합니다. 부서 ID(ID)는 고유 식별자로서 결과 테이블의 첫 번째 열에 위치하며, 각 월에 해당하는 매출 데이터가 별도의 열에 출력됩니다.
📊 테이블 구조
Department 테이블
Column Name | Type |
id | int |
revenue | int |
month | varchar |
- SQL에서 (id, month)는 이 테이블의 기본 키입니다.
- 이 테이블에는 각 부서의 월별 수익에 대한 정보가 있습니다.
- 이 달에는 ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]의 값이 있습니다.
💡 SQL 문제 해결 방법
- CASE문을 사용하여 각 월에 대해 조건부 합계를 계산합니다.
- 각 월별 열을 생성하고 매출을 해당 월에 맞게 배치합니다.
- GROUP BY 절을 사용하여 ID별로 데이터를 그룹화합니다.
- SUM 함수를 사용하여 매출 합계를 구합니다.
728x90
🖥️ 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
🔍 쿼리 분석
- CASE문: 각 월별 조건에 맞는 매출을 선택합니다.
- SUM 함수: 선택된 매출 값을 합산합니다.
- GROUP BY 절: 부서 ID별로 데이터를 그룹화하여 월별 매출 합계를 계산합니다.
- NULL 처리: 조건에 맞지 않는 경우 NULL 값을 반환합니다.
📌 실행 예제
📊 입력 데이터
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 |
- 4월부터 12월까지의 수익은 null입니다.
- 결과 테이블에는 13개의 열이 있습니다(부서 ID에 대한 1개 + 월에 대한 12개).
🎯 결론
이 문제는 SQL의 피벗(Pivot) 기법을 활용하여 데이터를 재구성하는 방식입니다. CASE문과 SUM 함수를 조합하여 데이터 변환 작업을 효율적으로 수행하는 방법을 연습할 수 있습니다.
더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀
728x90
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 1587. Bank Account Summary 2 (0) | 2025.03.10 |
---|---|
[LeetCode] 1407. Top Travellers (0) | 2025.03.06 |
[LeetCode] 1084. Sales Analysis 3 (2) | 2025.03.05 |
[LeetCode] 1050. Actors and Directors Who Cooperated At Least Three Times (2) | 2025.03.04 |
[LeetCode] 627. Swap Salary (0) | 2025.03.04 |