본문 바로가기
Skills/SQL

[프로그래머스] SQL - '우유와 요거트가 담긴 장바구니' 문제풀이

by 602yu 2024. 5. 3.

문제 링크입니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 설명

 

 

 

문제

 

데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.

 

 

 

풀이1 - GROUP_CONCAT 사용
SELECT DISTINCT CART_ID
FROM CART_PRODUCTS
GROUP BY CART_ID
HAVING GROUP_CONCAT(NAME) LIKE '%Milk%' 
    AND GROUP_CONCAT(NAME) LIKE '%Yogurt%'
ORDER BY CART_ID

 

CART_ID를 기준으로 그룹화한 후 GROUP_CONCAT(NAME)으로 각 그룹에 있는 상품의 이름을 하나의 문자열로 결합니다. 이렇게 하면 각 장바구니에 속한 상품들의 이름을 하나의 문자열로 얻을 수 있습니다.

결합된 상품 이름 문자열에서 'Milk'와 'Yogurt'가 모두 포함되는지 확인합니다.

 

GROUP_CONCAT 함수는 각 그룹에서 상품 이름을 결합하여 하나의 문자열로 만들어줍니다.

 

 

 

풀이2 - 서브쿼리
SELECT DISTINCT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'
    AND CART_ID IN (SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'Yogurt')
ORDER BY CART_ID

 

이 쿼리는 CART_PRODUCTS 테이블에서 우유를 구입한 장바구니를 찾은 후,

해당 장바구니의 CART_ID가 요거트를 구입한 장바구니의 CART_ID와 일치하는지 확인하는 방법입니다.