꿈은 데이터분석가, 취미는 계획

[MY SQL] 2개를 모두 담은 ID찾기(우유와 요거트가 담긴 장바구니) 본문

SQL/sql문풀

[MY SQL] 2개를 모두 담은 ID찾기(우유와 요거트가 담긴 장바구니)

data_2080 2024. 7. 26. 12:43
728x90

출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] :  우유와 요거트가 담긴 장바구

링크: https://school.programmers.co.kr/learn/courses/30/lessons/62284


문제(일부):  우유와 요거트를 동시에 구입한 장바구니의 아이디 조회


1. UNION과 GROUP BY 사용하기

1) NAME = 'Milk'인 것과 NAME = 'Yogurt'인 것을 각각 구하기
2) UNION으로 합친 후 group by해서 HAVING에서 2이상인 ID를 조회(=2개 모두 구매한 ID)

SELECT CART_ID
FROM (SELECT DISTINCT CART_ID, NAME
		FROM CART_PRODUCTS
		WHERE NAME = 'Milk'
UNION
SELECT DISTINCT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt') AS Filter

GROUP BY CART_ID
HAVING COUNT(CART_ID) >= 2
ORDER BY CART_ID

2. 서브쿼리 사용하기

1) Yougurt를 구매한 cart_id를 조회
2) 서브쿼리에서 Milk를 구매한 cart_id를 구하기
3) WHERE절에서 milk를 구매한 cart_id만 조회

SELECT DISTINCT CART_ID
FROM CART_PRODUCTS 
WHERE NAME = 'Yogurt'
    AND CART_ID IN (
            SELECT CART_ID
            FROM CART_PRODUCTS
            WHERE NAME = 'Milk')
ORDER BY CART_ID
728x90