미국의 각 지역별로 어떤 카테고리의 상품이 많이 판매되는지 알아보려고 합니다. region, category 별 주문량을 계산해 출력하는 쿼리를 작성해주세요.
결과 데이터는 아래와 같은 테이블 형태로 출력되어야 하고, Region 컬럼 기준 오름차순으로 정렬되어 있어야 합니다.
이 문제는 단순 GROUP BY를 사용하는 것이 아니라, SQL을 통해 피벗 테이블을 구현할 수 있는지를 묻는 문제이다
우선 GROUP BY만을 사용하면 대략 아래와 같이 표현할 수 있다.
SELECT
region
, category
, count(*) as "cnt"
FROM
records
GROUP BY
1, 2
ORDER BY
region
;

참고 글 : [SQL] Pivot Table : 피벗 테이블
SQL로 피벗 테이블을 만들기 위해서는 조건문을 사용할 수 있다.
GROUP BY된 상태에서, 추가로 CASE END (혹은 IF)문을 사용해서 2번째 조건에 맞는 경우를 나눌 수 있다.
True일 때 distinct order_id를 return하면 count()를 해서 집계할 수 있으며,
따로 False일 때의 값(else절)을 지정하지 않았다면 null을 return하기에 count()에서 제외된다.
SELECT
region as "Region"
, count(distinct case when category = 'Furniture'
then order_id end) as "Furniture"
, count(distinct case when category = 'Office Supplies'
then order_id end) as "Office Supplies"
, count(distinct case when category = 'Technology'
then order_id end) as "Technology"
FROM
records
GROUP BY
1
ORDER BY
region
;
