문제
💡 Write a solution to select the product id, year, quantity, and price for the first year of every product sold.
Return the resulting table in any order.
테이블 형태
풀이
SELECT product_id, year AS first_year, quantity, price
FROM Sales
WHERE (product_id, year) IN (SELECT product_id, MIN(year) AS year
FROM Sales
GROUP BY product_id)
해설
SELECT product_id, year AS first_year, quantity, price
FROM Sales
WHERE (product_id, year) IN (SELECT product_id, MIN(year) AS year
FROM Sales
GROUP BY product_id)
- 각 프러덕트별 최초로 판매된 연도의 판매 정보 일부를 출력하는 문제다
- 1️⃣ 각 프러덕트 별 2️⃣ 최초 판매 연도의 2가지 조건을 만족하는 다중컬럼 서브쿼리로 문제를 해결할 수 있다. 서브쿼리에서 product_id 별로 그룹화해 각 프러덕트별 판매연도의 최솟값(=최초 판매 연도)에 해당하는 데이터를 구해 해당 데이터와 일치하는 데이터만 필터링한다. 나는 서브쿼리 출력 결과 컬럼명도 맞춰줬는데 다른 사람의 쿼리를 보니 컬럼명까지 동일하게 할 필요는 없다
- 출력 조건에 맞게 컬럼을 출력한다
- Sales 테이블만으로도 해결할 수 있는 문제인데 Product 테이블은 왜 제시해줬는지 궁금하다
- 1658ms 약 상위 30%로 꽤 빠른 쿼리다
'SQL > 코딩테스트' 카테고리의 다른 글
[leetcode / MySQL] 1158. Market Analysis I (0) | 2024.02.27 |
---|---|
[leetcode / MySQL] 626. Exchange Seats (0) | 2024.02.22 |
[leetcode / MySQL] 585. Investments in 2016 (0) | 2024.02.22 |
[leetcode / MySQL] 176. Second Highest Salary (0) | 2024.02.19 |
[프로그래머스 / MySQL] 진료과별 총 예약 횟수 출력하기 (0) | 2024.02.02 |