본문 바로가기
코딩 테스트

[프로그래머스] 우유와 요거트가 담긴 장바구니

by zoodi 2021. 4. 12.
728x90

1. 문제

programmers.co.kr/learn/courses/30/lessons/62284#

 

코딩테스트 연습 - 우유와 요거트가 담긴 장바구니

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

programmers.co.kr

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

댓글