[SQL] 연습

[solvesql] 지역별 주문의 특징

Simon Yoon 2022. 10. 20. 23:51

Q. region, category 별 주문량을 계산해 출력하는 쿼리를 작성해주세요.

결과 데이터는 아래와 같은 테이블 형태로 출력되어야 하고, Region 컬럼 기준 오름차순으로 정렬되어 있어야 합니다.

목표 테이블

- 문제 조건 확인

1. region, category 주문량을 계산
→ group by 사용
2. 목표 테이블 형태
pivot 테이블 형식으로 출력되도록 쿼리를 작성
3. Region 컬럼 기준 오름차순으로 정렬
→ order by Region

- 테이블 확인

records 테이블에서 필요한 정보만 추출

- 풀이과정

1. 먼저 records table 을 확인한 후, region 만 추출

select region
from records
;
1. 실행 결과 일부


2. CASE 문을 활용하여, category 가 Furniture 인 경우의 주문건수를 집계
- CASE 문 사용방법: 2022.07.02 - [[SQL] 연습] - [SQL] CASE문
- 주문건수를 집계하므로 COUNT 함수를 활용하고, 이때 CASE 문이 COUNT 함수 안에 들어가게 됨
- CASE 문 → category 가 Furniture 인 경우, 주문건수를 count한 값을 보여주고, 아니면 null

select region,
  count(case when category = 'Furniture' then order_id else null end) cnt
from records
;
2. 실행 결과

- 위의 실행결과를 보면 region 에 East 가 출력된 것으로 보이나, 실제 cnt 의 값에는 category = 'Furniture' 에 대한 집계 값이 나타난다.

3. group by 를 활용하여 각 region 에 대한 집계

select region,
  count(case when category = 'Furniture' then order_id else null end) cnt
from records
group by region
;
3. 실행 결과

- 이제 위에서 작성한 쿼리문을 활용하여 최종 답안을 작성하기


A. 최종 답안

select region Region,
  count(distinct case when category = 'Furniture' then order_id else null end) Furniture,
  count(distinct case when category = 'Office Supplies' then order_id else null end) 'Office Supplies',
  count(distinct case when category = 'Technology' then order_id else null end) Technology
from records
group by region
order by region
;

- 답안을 작성하면서 하나 빠트린 것이 order_id 에 대한 distinct 를 추가해줘야 한다는 것이었다.

최종 실행 결과