꿈은 데이터분석가, 취미는 계획

[MY SQL] 제품별 최초 구매연도의 정보 조회하기 본문

카테고리 없음

[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