본문 바로가기
SQL/코딩테스트

[leetcode / MySQL] 1070. Product Sales Analysis III

by Hi_heidi 2024. 2. 27.

문제

💡 Write a solution to select the product idyearquantity, 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%로 꽤 빠른 쿼리다