imhamburger 님의 블로그
Leetcode - Seasonal Sales Analysis 문제풀이 본문
문제
https://leetcode.com/problems/seasonal-sales-analysis/description/
각 계절별로 가장 인기 있는 상품 카테고리를 찾기
계절은 다음과 같이 정의
- 겨울(Winter): 12월, 1월, 2월
- 봄(Spring): 3월, 4월, 5월
- 여름(Summer): 6월, 7월, 8월
- 가을(Fall): 9월, 10월, 11월
카테고리의 인기도는 해당 계절 동안 판매된 총 수량(quantity) 을 기준으로 결정.
만약 판매 수량이 동일한 카테고리가 여러 개라면, 총 매출액(수량 × 가격) 이 가장 높은 카테고리를 선택.
결과 테이블은 계절을 기준으로 오름차순 정렬하여 반환.
문제풀이
WITH t1 AS (SELECT *,
ROW_NUMBER() OVER(PARTITION BY tmp.season ORDER BY tmp.total_quantity DESC, tmp.total_revenue DESC) AS ranking
FROM (
SELECT CASE WHEN MONTH(sale_date) BETWEEN 9 AND 11 THEN 'Fall'
WHEN MONTH(sale_date) BETWEEN 3 AND 5 THEN 'Spring'
WHEN MONTH(sale_date) BETWEEN 6 AND 8 THEN 'Summer'
ELSE 'Winter' END AS season,
p.category,
SUM(s.quantity) AS total_quantity,
SUM(s.quantity*s.price) AS total_revenue
FROM sales s
JOIN products p ON s.product_id = p.product_id
GROUP BY season, p.category
) tmp
)
SELECT season,
category,
total_quantity,
total_revenue
FROM t1
WHERE ranking = 1
1. 판매 날짜(sale_date)의 월(month) 을 기준으로 계절(season)을 분류
2. 계절 + 상품 카테고리 단위로 판매 데이터를 집계
3. 계절별로 카테고리 순위를 매김 PARTITION BY tmp.season → 계절별로 그룹을 나눔
4. 각 계절에서 ranking = 1, 즉 가장 인기 있는 카테고리만 선택
| season | category | quantity | revenue | ranking |
| Winter | Electronics | 120 | 3,600,000 | 1 |
| Winter | Clothing | 120 | 2,800,000 | 2 |
| Spring | Food | 200 | 1,500,000 | 1 |
결과

'Mysql' 카테고리의 다른 글
| Mysql - CONCAT과 GROUP_CONCAT (0) | 2026.01.14 |
|---|---|
| Leetcode - Analyze Subscription Conversion 문제풀이 (0) | 2025.12.28 |
| Leetcode - Trips and Users 문제풀이 (0) | 2025.12.14 |
| 해커랭크 - Weather Observation Station 20 문제풀이 (0) | 2025.12.03 |
| 해커랭크 - BST 문제 풀이 (0) | 2025.11.30 |