📝 1084. Sales Analysis 3
🔹 매출 분석 3
2019년 1분기에만 판매된 제품을 보고하는 솔루션을 작성합니다. 즉, 2019-01-01부터 2019-03-31 사이입니다.
어떤 순서로든 결과 테이블을 반환합니다.
📝 문제설명
이 문제는 매출 분석 3(Sales Analysis 3) 문제로, 2019년 1분기(1월 1일 ~ 3월 31일) 에만 판매된 제품의 정보를 반환하는 작업을 수행합니다.
📊 테이블구조
Product 테이블
Column Name | Type |
product_id | int |
product_name | varchar |
unit_price | int |
Sales 테이블
Column Name | Type |
seller_id | int |
product_id | int |
buyer_id | int |
sale_date | date |
quantity | int |
price | int |
💡 SQL 문제 해결 방법
- JOIN을 사용하여 Sales 테이블과 Product 테이블을 연결합니다.
- WHERE 절에서 2019년 1분기(1월 1일 ~ 3월 31일) 판매 기록만 필터링합니다.
- NOT IN 서브쿼리를 사용하여 해당 제품이 1분기 외의 기간에 판매되지 않은 경우만 결과에 포함시킵니다.
- DISTINCT 키워드로 중복 제품을 제거합니다.
728x90
🖥️ SQL 풀이
SELECT DISTINCT a.product_id
, b.product_name
FROM Sales a
LEFT JOIN Product b
ON a.product_id = b.product_id
WHERE a.sale_date BETWEEN '2019-01-01' AND '2019-03-31'
AND a.product_id NOT IN (
SELECT DISTINCT product_id
FROM Sales
WHERE sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31'
)
🔍 쿼리 분석
- LEFT JOIN을 사용하여 Sales 테이블과 Product 테이블을 연결합니다.
- BETWEEN 조건을 사용하여 2019년 1분기만 조회합니다.
- 서브쿼리는 1분기 외의 기간에 판매된 제품 ID를 조회합니다.
- NOT IN 조건을 사용하여 1분기 외에 판매된 기록이 있는 제품을 제외합니다.
- 최종적으로 DISTINCT를 사용하여 중복된 제품 정보를 제거합니다
📌 실행 예제
📊 입력 데이터
Product 테이블
product_id | product_name | unit_price |
1 | S8 | 1000 |
2 | G4 | 800 |
3 | iPhone | 1400 |
Sales 테이블
seller_id | product_id | buyer_id | sale_date | quantity | price |
1 | 1 | 1 | 2019-01-21 | 2 | 2000 |
1 | 2 | 2 | 2019-02-17 | 1 | 800 |
2 | 2 | 3 | 2019-06-02 | 1 | 800 |
3 | 3 | 4 | 2019-05-13 | 2 | 2800 |
쿼리 실행 결과
product_id | product_name |
1 | S8 |
- 1번 상품인 S8 제품은 1월에만 판매되었습니다 -> 1분기에만 판매
- 2번 상품인 G4제품은 2월과 6월에 판매 되었습니다. -> 1, 2분기에 판매
- 3번 상품인 iPhone 제품은 5월에만 판매되었습니다 -> 2분기에만 판매
🎯 결론
이 문제는 특정 기간에만 판매된 제품을 조회하는 방식으로, NOT IN 서브쿼리와 JOIN 절을 활용한 데이터 필터링 기법을 연습할 수 있습니다.
특정 기간에만 판매된 제품을 찾는 경우에는 NOT IN 서브쿼리가 효과적이며, 이런 방식은 재고 분석이나 한정 판매 제품 식별에 유용합니다.
더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀
728x90
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 1407. Top Travellers (0) | 2025.03.06 |
---|---|
[LeetCode] 1179. Reformat Department Table (0) | 2025.03.05 |
[LeetCode] 1050. Actors and Directors Who Cooperated At Least Three Times (2) | 2025.03.04 |
[LeetCode] 627. Swap Salary (0) | 2025.03.04 |
[LeetCode] 607. Sales Person (0) | 2025.02.28 |