본문 바로가기

[LeetCode] 1179. Reformat Department Table

by qwee0328 2025. 3. 5.

📝 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 문제 해결 방법

  1. CASE문을 사용하여 각 월에 대해 조건부 합계를 계산합니다.
  2. 각 월별 열을 생성하고 매출을 해당 월에 맞게 배치합니다.
  3. GROUP BY 절을 사용하여 ID별로 데이터를 그룹화합니다.
  4. 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
반응형