일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩테스트
- Oracle
- 파이썬
- pandas
- 컴파일언어
- NumPy
- hackerrank
- 컴파일러
- Relation Extraction
- xla
- 프로그래밍
- string 모듈
- 해시테이블
- streamlit
- 코딩
- Compiler
- 코테
- sql
- 판다스
- 인터프리터언어
- 프로그래머스
- TF-IDF
- BM25
- 구름톤
- 오라클
- 해시
- python
- 해커랭크
- 자료구조
- ML
- Today
- Total
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/62284
코딩테스트 연습 - 우유와 요거트가 담긴 장바구니
CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가
programmers.co.kr
GROUP BY와 HAVING 절을 이용한 풀이
where name in ('Milk', 'Yogurt')
-- 구입한 상품 종류에 Milk 또는 Yogurt가 포함되어야 하는 조건을 준다
group by cart_id
-- cart_id 별로 그룹화한다
-- 하지만 여기까지 했을 때 Milk만 2번 구매하거나, Yogurt만 2번 구매하거나 하는 류의 원하지 않은 데이터들도 들어가 있기 때문에 조건을 주어 데이터를 정제해야 한다
having count(distinct name) = 2
-- cart_id 별로 그룹화한 데이터에서 상품 종류에 distinct를 주어 중복을 제거한다.
-- 이를 count 하여 2건만 나오도록 한다 (Milk와 Yogurt만 나오도록)
INTERSECT(교집합)을 이용한 풀이
select distinct cart_id
from cart_products
where name = 'Milk'
-- 'Milk'를 구매한 cart_id를 뽑는데, cart_id가 중복되지 않도록 뽑는다
select distinct cart_id
from cart_products
where name = 'Yogurt'
-- 'Yogurt'를 구매한 cart_id를 뽑는데, cart_id가 중복되지 않도록 뽑는다
-- INTERSECT를 통해 위의 두 결과의 교집합을 구한다
-- 결국 'Milk'와 'Yogurt'를 동시에 구매한 cart_id가 출력 결과로 나온다
'SQL' 카테고리의 다른 글
(HackerRank) 해커랭크 SQL [Higher Than 75 Marks] Oracle 풀이 (0) | 2021.12.02 |
---|---|
(HackerRank) 해커랭크 SQL [Weather Observation Station 8] Oracle 풀이 (0) | 2021.12.02 |
(HackerRank) 해커랭크 SQL [Weather Observation Station 5] Oracle 풀이 (0) | 2021.11.30 |
(프로그래머스) SQL Level 4 [보호소에서 중성화한 동물] Oracle 풀이 (0) | 2021.11.30 |
(프로그래머스) SQL Level 4 [입양 시각 구하기(2)] Oracle 풀이 (0) | 2021.11.30 |