데이터 놀이터
우유와 요거트가 담긴 장바구니 본문
728x90
1. 문제
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다.
우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요.
이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/62284
2. 문제 조건
- 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니 -> GROUP BY를 통해 한 장바구니 아이디 안에 품목 검색
- 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회 -> SELECT
- 장바구니의 아이디 순-> ORDER BY
3. 코드 작성
# SELECT DISTINCT(MILK.CART_ID)
# FROM (SELECT CART_ID
# FROM CART_PRODUCTS
# WHERE NAME = 'Milk') AS MILK
# JOIN (SELECT CART_ID
# FROM CART_PRODUCTS
# WHERE NAME = 'Yogurt') AS YOGURT
# ON MILK.CART_ID = YOGURT.CART_ID
# ORDER BY MILK.CART_ID;
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;
4. 회고
- GROUP BY와 관련해서 흩어져 있는 문자열을 한줄에 합쳐서 보여주는 GROUP_CONCAT을 배우게 되었다.
-
- GROUP_CONCAT은 서로 다른 결과를 구분자(기본 ,)를 기준으로 합쳐서 보여주는 함수다.
- GROUP BY와 함께 활용하면 그룹화 기준에 맞는 서로 다른 결과를 하나로 합쳐서 보여줄 수 있다.
- 문법
- GROUP_CONCAT(필드명) : a, b, c...형식으로 출력
- GROUP_CONCAT(필드명 seperator '구분자') : a 구분자 b 구분자 ...
- GROUP_CONCAT(DISTINCT 필드명) : 중복되는 문자열 제거
-
- 처음에는 서브쿼리와 JOIN을 활용해서 통과했는데, 가독성, 성능 면에서 많이 떨어져보인다. 아직 문자열과 관련해서 MYSQL 함수를 모르는게 많은데, 문제를 풀며 하나하나 알아가야겠다.
728x90
'SQL' 카테고리의 다른 글
SQL 고급 강의 - DML (0) | 2023.09.21 |
---|---|
Hackerrank - New Companies (0) | 2023.09.10 |
JOIN - 보호소에서 중성화한 동물 (0) | 2023.08.29 |
JOIN - 상품을 구매한 회원 비율 구하기 (0) | 2023.08.29 |
String, Date - 오랜 기간 보호한 동물(2) (0) | 2023.08.28 |