부제:
우유와 요거트가 담긴 장바구니, 레벨 4
1. 문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/62284
2. 정답 코드:
=> 집계 함수와 HAVING 활용
SELECT cart_id
from cart_products
where name in ('Milk','Yogurt')
group by cart_id
having count(distinct name) >= 2
order by cart_id;
=> 교집합(INTERSECT) 개념 사용 ( (Milk를 포함하는 cart_id 목록) INTERSECT (Yogurt를 포함하는 cart_id 목록) )
SELECT cart_id FROM cart_products WHERE name = 'Milk'
INTERSECT
SELECT cart_id FROM cart_products WHERE name = 'Yogurt'
ORDER BY cart_id;
=> 셀프 조인(Self Join) 활용 (같은 테이블을 두 번 불러와서(FROM cart_products A, cart_products B) 조인하는 방법)
SELECT DISTINCT A.cart_id
FROM cart_products A
JOIN cart_products B ON A.cart_id = B.cart_id
WHERE A.name = 'Milk'
AND B.name = 'Yogurt'
ORDER BY A.cart_id;
3. 오류 상황:
SELECT cart_id
from cart_products
where name in ('Milk','Yogurt')
group by cart_id
order by cart_id;
=> 필터링 부족
4. 시도 방법:
=> having 절 사용
5. 최종 문제 해결 방법:
=> 단순히 그 그룹 안에 'Milk'나 'Yogurt'가 있는지를 보는 게 아니라, "서로 다른 종류의 이름이 몇 개 존재하는가"를 체크하는 것 필요. HAVING 절에서 COUNT(DISTINCT name)의 값이 2 이상일 때 '둘 다' 가진 것이다.
'SQL 알고리즘 코드카타' 카테고리의 다른 글
| SQL 알고리즘 코드카타 21일차(3) 26.01.19(월) (1) | 2026.01.19 |
|---|---|
| SQL 알고리즘 코드카타 21일차(2) 26.01.19(월) (0) | 2026.01.19 |
| SQL 알고리즘 코드카타 20일차(5) 26.01.18(일) (0) | 2026.01.18 |
| SQL 알고리즘 코드카타 20일차(4) 26.01.18(일) (0) | 2026.01.18 |
| SQL 알고리즘 코드카타 20일차(3) 26.01.18(일) (1) | 2026.01.18 |