일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 데이터분석
- 부트캠프
- 국비지원취업
- 국비지원
- 코딩테스트
- 데이터분석부트캠프
- 패스트캠퍼스부트캠프
- bigquery
- sql강의
- 프로그래머스
- SQL
- Python
- 코딩테스트문제풀이
- 패스트캠퍼스데이터분석부트캠프
- qgis
- 데이터분석가
- 국비지원교육
- 아나콘다
- Programmers
- shp
- 패스트캠퍼스기자단
- 코딩연습
- mysql
- 데이터분석취업
- K디지털기초역량훈련
- 패스트캠퍼스
- 내일배움카드
- WSL
- 학습일지
- 코테문제풀이
- Today
- Total
데이터 리터러시를 위한 발자취
[프로그래머스] 코딩테스트 연습 - 우유와 요거트가 담긴 장바구니 본문
우유와 요거트가 담긴 장바구니 - 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절 사용할 필요 있음
'데이터 분석 > SQL' 카테고리의 다른 글
[HackerRank] Ollivander's Inventory (2) | 2023.12.26 |
---|---|
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (2) | 2023.10.04 |
[프로그래머스] 코딩테스트 연습 - 헤비 유저가 소유한 장소 (0) | 2023.09.21 |
[패스트캠퍼스] SQL 강의 학습후기 5주차 (0) | 2023.06.24 |
[패스트캠퍼스] SQL 강의 학습후기 4주차 (2) | 2023.06.17 |