문제 : 아래와 같은 데이터가 있을 때 ID와, Month를 그룹으로하여 revenue의 합계를 구하는 피벗테이블을 구성해라. 이때 Month값이 열로 와야하며, 변수명은 다음과 같아야 한다.
변수명 : Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue
/* INPUT TABLE
| id | revenue | month |
| -- | ------- | ----- |
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
*/
/* OUTPUT TABLE */
+------+-------------+-------------+-------------+-----+-------------+
| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |
+------+-------------+-------------+-------------+-----+-------------+
| 1 | 8000 | 7000 | 6000 | ... | null |
| 2 | 9000 | null | null | ... | null |
| 3 | null | 10000 | null | ... | null |
+------+-------------+-------------+-------------+-----+-------------+
풀이방법 :
1. 열기준 변수 지정 :
Month를 조건을 걸어 새로운 변수를 생성해야 한다.
/ CASE WHEN 열기준 변수의 조건문 THEN 조건에 대한 결과 ELSE NULL END AS 새로운 열이름
2. 그 외 그룹 변수 지정 :
GROUP BY 문에 ID가 들어가 ID 별 피벗테이블을 구성해야 한다.
코드 :
SELECT id
, SUM(CASE WHEN month="Jan" THEN revenue ELSE NULL END) AS Jan_Revenue
, SUM(CASE WHEN month="Feb" THEN revenue ELSE NULL END) AS Feb_Revenue
, SUM(CASE WHEN month="Mar" THEN revenue ELSE NULL END) AS Mar_Revenue
, SUM(CASE WHEN month="Apr" THEN revenue ELSE NULL END) AS Apr_Revenue
, SUM(CASE WHEN month="May" THEN revenue ELSE NULL END) AS May_Revenue
, SUM(CASE WHEN month="Jun" THEN revenue ELSE NULL END) AS Jun_Revenue
, SUM(CASE WHEN month="Jul" THEN revenue ELSE NULL END) AS Jul_Revenue
, SUM(CASE WHEN month="Aug" THEN revenue ELSE NULL END) AS Aug_Revenue
, SUM(CASE WHEN month="Sep" THEN revenue ELSE NULL END) AS Sep_Revenue
, SUM(CASE WHEN month="Oct" THEN revenue ELSE NULL END) AS Oct_Revenue
, SUM(CASE WHEN month="Nov" THEN revenue ELSE NULL END) AS Nov_Revenue
, SUM(CASE WHEN month="Dec" THEN revenue ELSE NULL END) AS Dec_Revenue
FROM Department
GROUP BY id
왜 ELSE 뒤에 NULL을 쓰는가? 아래 글 참고
'SQL > 코딩테스트' 카테고리의 다른 글
[MySQL] Self join을 활용한 코딩테스트 주의사항 (0) | 2024.11.05 |
---|---|
[MySQL] Self Join (0) | 2024.11.05 |
[MySQL] SQL로 피벗테이블 만드는 순서(데이터 피봇팅) (0) | 2024.11.05 |
[MySQL] CASE 문에서 WHEN 순서의 중요성 (0) | 2024.11.04 |
[MySQL] 그룹화된 변수에 조건을 걸어 원하는 값 출력하기 (0) | 2024.11.04 |