Q. region, category 별 주문량을 계산해 출력하는 쿼리를 작성해주세요.
결과 데이터는 아래와 같은 테이블 형태로 출력되어야 하고, Region 컬럼 기준 오름차순으로 정렬되어 있어야 합니다.
- 문제 조건 확인
1. region, category 별 주문량을 계산
→ group by 사용
2. 목표 테이블 형태
→ pivot 테이블 형식으로 출력되도록 쿼리를 작성
3. Region 컬럼 기준 오름차순으로 정렬
→ order by Region
- 테이블 확인
- 풀이과정
1. 먼저 records table 을 확인한 후, region 만 추출
select region
from records
;
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
;
- 위의 실행결과를 보면 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
;
- 이제 위에서 작성한 쿼리문을 활용하여 최종 답안을 작성하기
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 를 추가해줘야 한다는 것이었다.
'[SQL] 연습' 카테고리의 다른 글
[sql] 작품이 없는 작가 찾기 (0) | 2022.11.05 |
---|---|
[solvesql] 할부는 몇 개월로 해드릴까요 (0) | 2022.10.30 |
[solvesql] 일별 블로그 방문자 수 집계 (0) | 2022.10.13 |
[solvesql] 복수 국적 메달 수상한 선수 찾기 (0) | 2022.10.09 |
[SQL] 쇼핑몰의 일일 매출액과 ARPPU (0) | 2022.07.24 |