반응형
문제
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.
Input:
Sales table:
+---------+------------+------+----------+-------+
| sale_id | product_id | year | quantity | price |
+---------+------------+------+----------+-------+
| 1 | 100 | 2008 | 10 | 5000 |
| 2 | 100 | 2009 | 12 | 5000 |
| 7 | 200 | 2011 | 15 | 9000 |
+---------+------------+------+----------+-------+
Product table:
+------------+--------------+
| product_id | product_name |
+------------+--------------+
| 100 | Nokia |
| 200 | Apple |
| 300 | Samsung |
+------------+--------------+
Output:
+------------+------------+----------+-------+
| product_id | first_year | quantity | price |
+------------+------------+----------+-------+
| 100 | 2008 | 10 | 5000 |
| 200 | 2011 | 15 | 9000 |
+------------+------------+----------+-------+
문제 요약
팔린 제품 중 제품 id 별로, 가장 처음 팔린 년도의 년도와, 매출량, 가격을 추출하라
풀이
처음 시도한 풀이(실패)
SELECT p.product_id, MIN(s.year) AS first_year, s.quantity, s.price
FROM sales s
LEFT JOIN product p
ON s.product_id = p.product_id
GROUP BY 1
product_id가 69인 데이터를 살펴보면, 첫 구매 연도에 맞는 매출량과 가격은 2, 9908인데
해당 쿼리를 통해 추출하면 product_id가 69인 데이터의 첫 행 데이터가 추출되는 것을 알 수 있다.
첫 구매 연도에 맞는 매출량과 가격을 나오게 하려면 어떻게 해야 할까?
두 번째 시도한 풀이(성공)
SELECT s.product_id, s.year AS first_year, s.quantity, s.price
FROM sales s
RIGHT JOIN (SELECT product_id, MIN(year) AS year
FROM sales
GROUP BY 1) t
ON s.product_id = t.product_id AND s.year = t.year
먼저 서브쿼리를 살펴보자.
product_id와 첫 구매연도를 구하기 위한 쿼리를 짰다.
product_id별로 group by를 해주어 MIN(year)을 구해주었다.
그리고 해당 서브쿼리를 sales 테이블과 JOIN을 해주었다.
ON 조건 작성 시, product_id와 year이 같도록 작성해주었더니, 해당 product_id와 year에 알맞는 매출량과 가격이 추출되었다.
반응형