imhamburger 님의 블로그

Leetcode - Seasonal Sales Analysis 문제풀이 본문

Mysql

Leetcode - Seasonal Sales Analysis 문제풀이

imhamburger 2025. 12. 26. 10:20

문제

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

 

 

결과