SQL 문제풀이

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

냄비짱 2023. 8. 6. 02:30
728x90

❓ Question

❗ Answer

# GROUP_CONCAT 활용
SELECT cart_id
    FROM cart_products
    GROUP BY cart_id
    HAVING GROUP_CONCAT(name) LIKE '%Milk%'
           AND GROUP_CONCAT(name) LIKE '%Yogurt%' 
    ORDER BY cart_id;

# sub query 활용
SELECT DISTINCT cart_id
FROM cart_products
WHERE name = 'Milk'
AND cart_id in (SELECT cart_id FROM cart_products WHERE name = 'Yogurt')
ORDER BY cart_id;

# IN, DISTNICT 활용
SELECT cart_id
FROM cart_products
WHERE name IN ('Milk', 'Yogurt')
GROUP BY cart_id
HAVING COUNT(DISTINCT name) >= 2
ORDER BY cart_id;

📌 Discussion

  • group_concat 활용

  • group_concat으로 car_id 별로 모든 제품을 다 합친 후에 두가지를 모두 포함한 장바구니를 추출

  • sub-query 활용

  • sub query로 name에 'Yogurt'가 포함된 cart_id 추출 후

  • main query에서 해당하는 cart_id 중 'Milk'가 포함된 cart_id 추출

  • in, distinct 활용

  • name이 주어진 조건인 모든 cart_id 추출 후

  • HAVING으로 중복되지 않은 name이 2이상('Milk', 'Yogurt'가 모두 들어있는)인 cart_id 추출