https://leetcode.com/problems/product-sales-analysis-iii/description/
Column Name | Type |
sale_id | int |
product_id | int |
year | int |
quantity | int |
price | int |
Sales 테이블:
- sale_id (int): 판매 ID
- product_id (int): 제품 ID (Product 테이블의 외래 키)
- year (int): 판매 연도
- quantity (int): 판매 수량
- price (int): 단위 가격
Column Name | Type |
product_id | int |
product_name | varchar |
Product 테이블:
- product_id (int): 제품 ID
- product_name (varchar): 제품 이름
Sales 테이블에서 각 제품(product_id)의 첫 번째 판매 연도(year)에 해당하는 제품 ID, 연도, 수량, 가격을 선택하는 SQL 쿼리를 작성하세요. 결과는 아무 순서로나 반환해도 됩니다.
오늘의 sql코드카타, 제품 id별로 최소년도(첫 판매년도)의 id, 연도, 수량, 가격을 출력하면 된다. 솔직히 말해서 딱 봤을때 쉬워보였다. 그런데 문제가 있었다. 예시는 분명 올바르게 출력이 되었는데 실제로 제출을 하니 결과가 맞지 않았다.
select
s.product_id,
fy.first_year,
s.quantity,
s.price
from Sales s join
(
select
product_id,
min(year) first_year
from Sales
group by product_id
) fy on s.product_id = fy.product_id
group by s.product_id
처음으로 작성했던 코드
출력결과를 살펴보니 출력값의 년도에 대한 데이터가 일치되지 않은 것을 확인할 수 있었다. 코드를 다시 살펴보니 내가 잘못 생각한 부분이 있었다. 메인쿼리에 작성한 group by s.product_id가 바로 그 부분인데 내 목적은 첫 년도에 해당하는 데이터만 출력하려고 한 것이지만 필터링을 이렇게 하면 나머지 데이터들이 제대로 출력이 안되기 때문이다.
대신에 join에 조건을 추가해서 판매년도와 첫 판매년도가 일치하는 열만 출력하도록 하자.
select
s.product_id,
fy.first_year,
s.quantity,
s.price
from Sales s join
(
select
product_id,
min(year) first_year
from Sales
group by product_id
) fy on s.product_id = fy.product_id and
fy.first_year = s.year
'코딩일기' 카테고리의 다른 글
SQL 코드카타 102 - Classes More Than 5 Students (0) | 2024.06.29 |
---|---|
알고리즘 코드카타 102 - 다리를 지나는 트럭 (0) | 2024.06.29 |
알고리즘 코드카타 101 - 2개 이하로 다른 비트 (0) | 2024.06.28 |
SQL 중간 점검 (0) | 2024.06.14 |
이제 놀만큼 놀았으니 다시 공부해봅시다! (0) | 2024.06.04 |