본문 바로가기
[업무 지식]/MySQL

[HAVING] 우유와 요거트가 담긴 장바구니

by 에디터 윤슬 2024. 10. 13.

목차

     

    링크

    https://school.programmers.co.kr/learn/courses/30/lessons/62284

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    문제

    데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.

     

    정답 1

    select cart_id
    from cart_products
    where name = 'Milk'
    or name = 'Yogurt'
    group by cart_id
    having count(distinct name) = 2
    order by 1

     

    정답 2

    select cart_id
    from cart_products
    where name = 'Milk'
    intersect
    select cart_id
    from cart_products
    where name = 'Yogurt'

    정답 3

    select distinct 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'

    해설

    • WHERE와 OR로 우유와 요거트를 구매한 cart_id 구하기
    • GROUP BY 와 HAVING을 사용하여 cart_id 구하기
      • 궁금증 : count를 cart_id가 아니라 name의 수량을 구한 이유 = 밀크와 요거트 2개만 정확하면 카트 아이디를 추출할 수 있다
    • 카트아이디를 기준으로 정렬

    새롭게 이해한 내용

    장바구니를 구하는 데 집중하여 장바구니의 수량을 구하기보다 그 조건을 생각하여 having절을 활용할 수 있다