https://school.programmers.co.kr/learn/courses/30/lessons/62284
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다.
NAME | TYPE |
ID | INT |
CART_ID | INT |
NAME | VARCHAR |
PRICE | INT |
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
조회할 정보 : 장바구니의 아이디
조건1 : 우유(Milk)와 요거트(Yogurt)를 동시에 구입
조건2 : 장바구니의 아이디 순
--조회할 정보
SELECT cart_id
from cart_products
--조건1
where name in ('milk', 'yogurt')
group by cart_id
having count(distinct(name)) >= 2
--조건2
order by cart_id ;
※ 위는 서브쿼리를 사용하지 않고 조건을 직관적으로 풀이하여 작성한 코드입니다.
다른 분들의 해답을 보던 중, Inner 조인과 서브쿼리를 통해 풀이한 좋은 코드가 있어서 추가적으로 아래에 공유합니다.
SELECT DISTINCT a.cart_id
FROM (
SELECT *
FROM cart_products
WHERE name = 'Milk'
) a
INNER JOIN (
SELECT *
FROM cart_products
WHERE name = 'Yogurt'
) b
ON a.cart_id = b.cart_id
ORDER BY a.cart_id
조건이 적고, 다양한 방법으로 풀이가 가능하여 난이도가 그리 높지 않다고 느껴지는 문제
다양한 풀이를 보고 따라하며 학습을 하면 좋을 것 같다.
group by 뒤에 조건은 having 절로
'컴퓨터 공부 > SQL' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 MySQL Lv.4 : 취소되지 않은 진료 예약 조회하기 (0) | 2022.12.08 |
---|---|
프로그래머스 코딩테스트 연습 MySQL Lv.4 : 년, 월, 성별 별 상품 구매 회원 수 구하기 (2) | 2022.11.29 |
프로그래머스 코딩테스트 연습 MySQL Lv.4 : 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2022.11.21 |
프로그래머스 코딩테스트 연습 MySQL Lv.4 : 5월 식품들의 총매출 조회하기 (0) | 2022.11.19 |
프로그래머스 코딩테스트 연습 MySQL Lv.4 : 보호소에서 중성화한 동물 (0) | 2022.11.18 |