🔍 문제
1. 첫 주문과 마지막 주문
문제 링크 : https://solvesql.com/problems/revenue-pct-per-category/
🎯정답
-- CTE를 통해서 카테고리 별 매출 합계를 구한다.
with total_category_sales as
(select category, sum(sales) as sales_category
from records
group by category),
-- 다시 CTE를 통해서 서브 카테고리별 매출을 구해주며, 이 때 카테고리도 포함되게 만든다.
total_sub_category_sales as
(select category, sub_category, sum(sales) as sales_sub_category
from records
group by sub_category, category
order by sub_category)
select
s.category,
s.sub_category,
round(s.sales_sub_category, 2) as sales_sub_category,
round(c.sales_category, 2) as sales_category,
-- 서브쿼리를 이용해서 전체 매출 값을 sales_total로 구해준다.
(select round(sum(sales_category), 2) from total_category_sales) as sales_total,
-- 각 서브 카테고리 별 매출 비율 구하기
round((s.sales_sub_category / c.sales_category) * 100, 2) as pct_in_category,
-- 전체 매출 중에서 서브 카테고리별 매출 비율 구하기
round((s.sales_sub_category / (select round(sum(sales_category), 2) from total_category_sales)) * 100, 2)as pct_in_total
from
total_sub_category_sales s
join
total_category_sales c
on
s.category = c.category
order by s.category
❓풀이
- 총 두 개의 CTE를 활용해서 카테고리 별 매출, 서브 카테고리 별 매출을 구해준다.
- 카테고리 컬럼을 기준으로 join 하여 구할 수 있는 값은 구해준다.
- select문 안에서 서브쿼리를 이용해 전체 매출을 구해줬으며, 이를 통해 전체 매출 대비 각 서브 카테고리 별 매출 비율을 구해줬다.
'프로그래밍 언어 > 02. SQL' 카테고리의 다른 글
| [PostgreSQL] solvesql LV.2 언더스코어(_)가 포함되지 않은 데이터 찾기 (0) | 2025.10.07 |
|---|---|
| [PostgreSQL] solvesql LV.2 다음날도 서울숲의 미세먼지 농도는 나쁨 (0) | 2025.10.07 |
| [SQL] 프로그래머스 LV.4 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2025.09.11 |
| [SQL] 프로그래머스 LV.4 FrontEnd 개발자 찾기 (0) | 2025.09.09 |
| [SQL] 프로그래머스 LV.4 자동차 대여 기록 별 대여 금액 구하기 (0) | 2025.09.09 |
