[프로그래머스] SQL/정답 노트

[lv4] 우유와 요거트가 담긴 장바구니

SH3542 2024. 10. 18. 20:47

https://school.programmers.co.kr/learn/courses/30/lessons/62284#qna

 

SELECT CART_ID
FROM CART_PRODUCTS
GROUP BY CART_ID
HAVING EXISTS (SELECT * FROM CART_PRODUCTS WHERE NAME = 'Milk')
   AND EXISTS (SELECT * FROM CART_PRODUCTS WHERE NAME = 'Yogurt')
ORDER BY CART_ID

 

1. 그룹화 하더라도 EXISTS는 모든 테이블에 대해 수행할 것이므로 수정해야 했다.

2. SELECT문에 * 대신 COUNT(*)을 쓴다면 이는 COUNT가 0이어도 EXISTS TRUE 처리 됨에 주의해야 한다.

3. 굳이 그룹화할 필요가 없었다. DISTINCT로 수정했다.

 

SELECT DISTINCT CART_ID
FROM CART_PRODUCTS A
HAVING EXISTS (SELECT * FROM CART_PRODUCTS WHERE NAME = 'Milk' AND CART_ID = A.CART_ID)
   AND EXISTS (SELECT * FROM CART_PRODUCTS WHERE NAME = 'Yogurt' AND CART_ID = A.CART_ID)
ORDER BY CART_ID