728x90
📚문제
📝풀이
# 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