세조목

SQL 정리(프로그래머스 - '우유와 요거트가 담긴 장바구니')(24.01.22) 본문

데이터 분석 공부/SQL

SQL 정리(프로그래머스 - '우유와 요거트가 담긴 장바구니')(24.01.22)

세조목 2024. 1. 22. 20:03

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

 

프로그래머스

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

programmers.co.kr

SELECT DISTINCT CP1.CART_ID
FROM CART_PRODUCTS CP1 CROSS JOIN CART_PRODUCTS CP2
WHERE CP1.CART_ID = CP2.CART_ID AND CP1.NAME = 'MILK' AND CP2.NAME = 'YOGURT'
ORDER BY CP1.CART_ID

 

 

우유와 요거트를 동시에 구입한 장바구니('CART_ID')를 구해야한다.

하나의 컬럼에 하나의 속성값만 들어가있기때문에 WHERE절에서

LIKE를 쓰거나 등호(=)를 쓸수도 없다.

 

그렇다면 CART_PRODUCTS테이블을 CROSS JOIN하여 모든 경우의 수를 만들고

거기서 하나의 장바구니에 MILK와 YOGURT가 모두 들어있는

장바구니를 소팅하면 되지 않을까?

 

CART_PRODUCTS 테이블을 CROSS JOIN하면 아래 이미지에서 확인할 수 있는것처럼

모든 경우의 수를 구할 수 있다.

우측 CART_ID가 83인 경우에 모든 CART_ID의 모든 NAME이 JOIN되는 것을 확인할 수 있습니다.

 

여기서

WHERE CP1.CART_ID = CP2.CART_ID AND CP1.NAME = 'MILK' AND CP2.NAME = 'YOGURT'

CP1과 CP2의 CART_ID가 같고,

CP1의 NAME은 MILK,

CP2의 NAME은 YOGURT

인 경우를 소팅해주면

결과값인 

이 출력되는 것을 확인할 수 있다.