그룹변수 하나와 양적변수 여러개로 피벗을 만들고 싶을 때가 있다. 데이터 중 아래 두 변수를 활용해 피벗을 만들어 보겠다.
문제 : 그룹별로 가격의 평균을 보고 싶다.
코드 한줄로 끝내도 되나 좀더 자세히 풀어보겠다.
풀이 예시는 그룹 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
아래는 최종 결과이다.
'SQL > 코딩테스트' 카테고리의 다른 글
[MySQL] Self join을 활용한 코딩테스트 주의사항 (0) | 2024.11.05 |
---|---|
[MySQL] Self Join (0) | 2024.11.05 |
[MySQL] 그룹변수가 2개로 피벗테이블 구성 (0) | 2024.11.05 |
[MySQL] CASE 문에서 WHEN 순서의 중요성 (0) | 2024.11.04 |
[MySQL] 그룹화된 변수에 조건을 걸어 원하는 값 출력하기 (0) | 2024.11.04 |