728x90
1. 문제
programmers.co.kr/learn/courses/30/lessons/62284#
2.풀이
오랜만에 SQL문제를 풀어보았다.
요거트와 우유를 동시에 구매한 장바구니 아이디를 리턴해야하는 문제.
동시에 구매했는지 알기위해 서브쿼리에 우선 name컬럼에 조건을 걸었고 group by 절을 사용해서 필터링했다.
장바구니 아이디를 카운팅해서 2개 이상이면 (=요거트와 우유를 동시에 구매한 경우) cart_id 순으로 출력
3.코드
SELECT a.cart_id
from (
select cart_id, name
from cart_products
where name='Milk' or name ='Yogurt'
group by cart_id,name
)a
group by cart_id
having count(a.cart_id) >= 2
order by cart_id
다른 간단한 풀이도 있길래 추가해본다.
SELECT A.CART_ID
FROM CART_PRODUCTS AS A,
(SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = "Milk") AS B
WHERE A.CART_ID = B.CART_ID AND A.NAME = "Yogurt"
Self Join 한 경우
SELECT a.CART_ID
FROM CART_PRODUCTS a JOIN CART_PRODUCTS b ON a.CART_ID = b.CART_ID
WHERE a.NAME = "Milk" AND b.NAME = "Yogurt"
ORDER BY CART_ID;
오라클 inner join 사용한 경우
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'
INTERSECT
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt'
728x90
'코딩 테스트' 카테고리의 다른 글
[백준] 연산자 끼워넣기 (C++) (0) | 2021.04.13 |
---|---|
[프로그래머스] 지형이동 (C++) (0) | 2021.04.12 |
[프로그래머스] 멀쩡한 사각형 (Python) (0) | 2021.04.12 |
[프로그래머스] 징검다리 건너기 (Python) (0) | 2021.04.10 |
[프로그래머스] 키패드 누르기 (C++) (0) | 2021.04.10 |
댓글