카테고리 없음
[MY SQL] 제품별 최초 구매연도의 정보 조회하기
data_2080
2024. 8. 13. 23:40
728x90
출처: [Leetcode - 1070. Product Sales Analysis III]
문제(일부): 제품별로 첫번째로 구매된 해의 정보 조회하기
1. WITH 절 + INNER JOIN
1) WITH절에서 제품별 최초로 판매된 해를 추출2) 원본 테이블과 join, product_id와 year가 일치하는 조건
# 제품별로 판매된 첫 해를 추출
WITH first_year AS (
SELECT product_id, MIN(year) AS first_year
FROM sales
GROUP BY product_id
)
# 원본테이블과 join하여 첫해의 정보를 조회
SELECT s.product_id
,s.year AS first_year
,s.quantity
,s.price
FROM sales AS s
INNER JOIN first_year AS f
ON s.product_id = f.product_id
AND s.year = f.first_year;
2. 중첩 서브쿼리
1) 서브쿼리로 제품별 최초로 판매된 해를 추출, WHERE절에서 일치하는 제품id와 년도를 필터링
SELECT product_id
,year AS first_year
,quantity
,price
FROM sales
# 서브쿼리에서 product_id별 첫 판매해로 필터링
WHERE (product_id, year) IN (
SELECT product_id, min(year)
FROM sales
GROUP BY product_id
)
3. 인라인뷰 + 윈도우함수(rank over)
1) 인라인뷰에서 윈도우 함수로 product_id별 연도가 빠르 순으로 랭킹을 부여
2) where 절에서 랭킹이 1인 것으로 필터링하여 제품별 최초 판매연도로 필터링
SELECT product_id, year AS first_year, quantity, price
FROM (SELECT *, RANK() OVER(PARTITION BY product_id ORDER BY year ASC) AS rn
FROM sales) A
WHERE rn = 1;
728x90