250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 코딩테스트
- SQL
- 파이썬
- GROUPBY
- SQL테스트
- leetcode문풀
- 약수구하기
- 파이썬문풀
- With
- sql문풀
- 프로그래머스
- 윈도우함수
- leetcode
- 셀프조인
- UNION
- 위키독스
- 서브쿼리
- join
- SQL고득점KIT
- 프로그래머스문풀
- 문풀
- 리트코드sql
- levle1
- 코테
- with절
- 활성사용자수
- 데이터분석
- mysql
- leetcodesql50
- 데이터리안
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 제품별 최초 구매연도의 정보 조회하기 본문
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