데이터 리터러시를 위한 발자취

[프로그래머스] 코딩테스트 연습 - 우유와 요거트가 담긴 장바구니 본문

데이터 분석/SQL

[프로그래머스] 코딩테스트 연습 - 우유와 요거트가 담긴 장바구니

wosole 2023. 9. 22. 15:12

우유와 요거트가 담긴 장바구니 - Summer/Winter Coding(2019)

 

문제 설명

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가격을 나타냅니다.

 

문제 

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

 

예시


문제풀이

접근방식은 아래와 같이 정리하여 진행하였습니다.

 

1. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회

- CART_PRODUCTS 단일 테이블 내 우유와 요거트를 동시에 구입한 CART_ID를 출력해야 함.

- CROSS JOIN 기반 CART_PRODUCTS을 C1, C2로 각각 구분

- WHERE 절을 사용하여 C1.NAME = 'Milk' AND C2.NAME = 'Yogurt' 조건 출력

- DISTINCT C1.CART_ID의 중복값 제거

 

2. 결과는 장바구니의 아이디 순

- ORDER BY C1.ID로 정렬 필요

 

제출 코드 

# 정답코드
SELECT DISTINCT C1.CART_ID
FROM CART_PRODUCTS C1
CROSS JOIN CART_PRODUCTS C2 ON C1.CART_ID = C2.CART_ID
WHERE C1.NAME = 'Milk' AND C2.NAME = 'Yogurt'
ORDER BY C1.ID

 

주의할 점

- 정답 제출 후, INNER JOIN으로 재시도 결과 동일한 답 출력 및 정답 처리됨

- 코딩테스트 진행에는 문제 없지만, 성능 측면에서는 CROSS JOIN보다는 INNER JOIN이 효율적임

→ MySQL 환경에서 상기 쿼리 출력 시, 처리속도 측면에서도 차이가 있을 것으로 예상

→ 문제나 테이블 형태에 따라 적절한 JOIN절 사용할 필요 있음 

Comments