본문 바로가기

SQL/LeetCode

LeetCode / 1084. Sales Analysis III / MySQL / Easy

728x90

📚문제

출처 : LeetCode(https://leetcode.com/problems/sales-analysis-iii/)


📝풀이

# Write your MySQL query statement below
SELECT DISTINCT s.product_id , p.product_name
FROM Sales s
INNER JOIN Product p ON s.product_id = p.product_id
WHERE s.sale_date BETWEEN '2019-01-01' AND '2019-03-31'
  AND s.product_id NOT IN (SELECT DISTINCT product_id
                           FROM Sales
                           WHERE sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31')

 

처음에는 WHERE절 서브쿼리에서 

계속 오답이 발생해서

WHERE sale_date > '2019-03-31'

                  ▼                 
                  
WHERE sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31'

 

위와 같이 변경 과정을 거쳤다

 

이유를 곰곰이 생각해보니..

아마 2018년 12월?이면

2019년의 봄 기간에 해당되지 않으니

답으로 들어간게 아닐까? 하는 추측이다(Output의 결과값이 더 많게 나옴)

 

그래서 NOT BETWEEN 조건으로 

2019년의 봄이 아닐 경우에는 다 제외 시키는

타이트한 조건으로 풀이해주면 정답이 된다

 

 

풀고나서 다른 답변들도 확인해보니

GROUP BY 한 다음에

MAX 날짜가 3월31일 이하이고

MIN 날짜가 1월1일 이상인 경우로 푼 코드가 많았다

 

참고용으로 작성

SELECT s.product_id
     , p.product_name
FROM Sales s
INNER JOIN Product p ON s.product_id = p.product_id
GROUP BY product_id
HAVING MAX(s.sale_date) <= '2019-03-31' AND MIN(s.sale_date) >= '2019-01-01'

product_id로만 GROUP BY 해주어도

product_id당 할당되는 product_name이 지정 되어있으므로 

두가지 모두로 그룹화하거나

집계함수를 사용하지 않아도 된다

728x90