본문 바로가기

[LeetCode] 1084. Sales Analysis 3

by qwee0328 2025. 3. 5.

📝 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 문제 해결 방법

  1. JOIN을 사용하여 Sales 테이블과 Product 테이블을 연결합니다.
  2. WHERE 절에서 2019년 1분기(1월 1일 ~ 3월 31일) 판매 기록만 필터링합니다.
  3. NOT IN 서브쿼리를 사용하여 해당 제품이 1분기 외의 기간에 판매되지 않은 경우만 결과에 포함시킵니다.
  4. 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
반응형