본문 바로가기
SQL/코딩테스트

[MySQL] SQL로 피벗테이블 만드는 순서(데이터 피봇팅)

by Nanki 2024. 11. 5.

그룹변수 하나와 양적변수 여러개로 피벗을 만들고 싶을 때가 있다. 데이터 중  아래 두 변수를 활용해 피벗을 만들어 보겠다.

 

문제 : 그룹별로 가격의 평균을 보고 싶다.

코드 한줄로 끝내도 되나 좀더 자세히 풀어보겠다.

 

풀이 예시는 그룹 1에 대한 평균을 계산하는것이다.

 

풀이 절차

1. 핵심은 CategoryID가 1일때 Category1_Price 가격을 출력하고 나머지 그룹엔 NULL로 작성하는 것이다. 이렇게 하면 차후 통계량 요약시 해당 행은 계산식에 포함되지 않는다.
(다른 그룹이 NULL임을 보이기 위해 *를 추가하여 전체 데이터를 보였다. 실제 피벗에서는 *를 빼야함에 유의.)

SELECT *, CASE WHEN categoryid = 1 THEN price ELSE NULL END AS category1_price
FROM Products

 

2. 이제 관심있는 요약통계량을 계산해준다. 그룹2, 그룹3도 그룹1와 같이 계산해준다.

SELECT
	AVG(CASE WHEN categoryid = 1 THEN price ELSE NULL END) AS category1_price
    ,AVG(CASE WHEN categoryid = 2 THEN price ELSE NULL END) AS category2_price
    ,AVG(CASE WHEN categoryid = 3 THEN price ELSE NULL END) AS category3_price
FROM Products

 

아래는 최종 결과이다.