[우유와 요거트가 담긴 장바구니]
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
-- 내가 작성한 쿼리
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk' OR NAME = 'Yogurt'
GROUP BY CART_ID
HAVING COUNT(NAME) >= 2
ORDER BY CART_ID
-- 정답 쿼리
-- **DISTINCT의 중요성**
-- 고유값을 COUNT 했을 때 2보다 크거나 같아야 Milk와 Yogurt를 포함한 것
-- 2이면 Milk와 Yogurt만 포함, 2보다 크면 다른 것도 포함
-- AND가 아니라 OR인 이유: GROUP BY 전에는 Milk와 Yogurt가 동시에 있을 수 없음
-- HAVING절의 조건 없이 NAME을 출력했을 때는 NAME값이 1개만 출력되지만 COUNT(DISTINCT NAME)이 2보다 크거나 같다는 조건을 부여할 수 있는 이유
-- 값은 1개만 출력되었지만 실제로는 여러개가 담겨있기 때문
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk' OR NAME = 'Yogurt'
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) >= 2
ORDER BY CART_ID
-- 피드백 (디벨롭)
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY 1
HAVING COUNT(DISTINCT NAME) >= 2
ORDER BY 1;
'SQL' 카테고리의 다른 글
QCC 1회차: WINDOW 함수 | RANK | 상관 서브쿼리 | 2번 JOIN하기 | 우선순위 부여 (1) | 2024.12.13 |
---|---|
SQL 코드카타 오답: CONCAT | FROM절 안에서 JOIN하기 (1) | 2024.12.11 |
SQL 코드카타 오답: 날짜 차이 | where, having 구분 | 테이블 조인 (2) | 2024.12.09 |
SQL 코드카타 오답: GROUP BY (1) | 2024.12.06 |
SQL 과제 오답: WITH | WITH RECURSIVE | STEDDEV (0) | 2024.12.05 |