우유와 요거트가 담긴 장바구니
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 내 풀이
- 셀프 조인으로 요거트/밀크를 각각 가진 테이블을 조인해서 구함
SELECT P1.CART_ID
FROM CART_PRODUCTS P1
JOIN (SELECT *
FROM CART_PRODUCTS
WHERE NAME='Yogurt') AS P2
ON P1.CART_ID = P2.CART_ID
WHERE P1.NAME='Milk'
ORDER BY 1
- 다른 사람 풀이
- GROUP BY+ HAVING 으로 풀이
- FROM
CART_PRODUCTS 테이블을 읽습니다. - WHERE
NAME이 'Milk' 또는 'Yogurt'인 행만 필터링합니다.
즉, 조건에 맞는 행만 남깁니다. - GROUP BY
필터링된 행들을 CART_ID 기준으로 그룹화합니다. - HAVING
각 그룹에서 DISTINCT NAME의 개수가 2인지 확인합니다.
즉, Milk와 Yogurt가 모두 있는 장바구니만 남깁니다.- DISTINCT 없이 COUNT(NAME) = 2라고 조건을 걸면:
- Milk, Milk만 들어 있어도 COUNT(NAME)이 2가 되기 때문에 오답이 나올 수 있음
- SELECT
조건을 통과한 그룹에서 CART_ID만 추출합니다. - ORDER BY
결과를 CART_ID 기준으로 오름차순 정렬합니다.
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY CART_ID;
'코딩테스트 > SQL' 카테고리의 다른 글
| [SQL][UNION][기본키/외래키] 📍주문량이 많은 아이스크림들 조회하기 (0) | 2025.06.10 |
|---|---|
| [SQL][ROUND] 서울에 위치한 식당 목록 출력하기 (0) | 2025.06.10 |
| [SQL] 📍 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2025.06.10 |
| [SQL][GROUP BY] 📍 저자 별 카테고리 별 매출액 집계하기 (0) | 2025.06.09 |
| [SQL] 취소되지 않은 진료 예약 조회하기 (0) | 2025.06.09 |