https://school.programmers.co.kr/learn/courses/30/lessons/62284
문제 예시
CART_PRODUCTS
원하는 출력
📌 풀이 )
* 틀린 풀이가 있으면 댓글 남겨주세요!
총 세가지 풀이를 가져와봤다.
풀이 1 ) GROUP BY, HAVING 이용
먼저 Milk, Yogurt 둘 중 하나를 가지고 있는 것 들을 찾는다.
다음, 우리는 Milk와 Yogurt 둘 다 가지고 있는 장바구니를 찾고 싶기 때문에, CART_ID를 기준으로 그룹화하여 HAVING COUNT가 2인것을 찾는다.
여기서 COUNT(DISTINCT NAME)은 각 장바구니에 있는 고유한 상품의 개수를 나타낸다. 만약 두 상품을 모두 포함하고 있다면 이 값은 2가 되기 때문에 2로 설정한다.
마지막으로 CART_ID로 정렬하면 끝!
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY CART_ID;
풀이 2 ) 서브쿼리 이용
서브쿼리를 이용하는 방법이다.
먼저 Milk를 포함하는 장바구니를 선택한다.
그런 다음, 서브쿼리를 사용하여 Yogurt를 포함하는 장바구니의 ID를 선택한다.
마지막으로 정렬을 적용하면 끝!
한 장바구니당 제품 개수를 하나씩만 포함할 것이라고 생각하고 DISTINCT를 쓰지않았는데, 혹시나 하면 CART_ID앞에 DISTINCT를 붙여도 좋을 것 같다.
SELECT 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;
풀이 3 ) INNER JOIN 이용
CART_PRODUCTS를 두번 참조하는 방법이다.
같은 테이블이지만 임의로 cp1, cp2로 칭하겠다. 그 둘을 CART_ID가 같은 것으로 INNER JOIN해준다.
조인된 값들에서 cp1에서는 Milk인것을, cp2에서는 Yogurt인 것을 찾아서 CART_ID로 정렬해준다.
위와 마찬가지 이유로 DISTINCT를 안 붙여도 정답처리가 되고 있긴하지만, DISTINCT 처리를 해주었다.
SELECT DISTINCT cp1.CART_ID
FROM CART_PRODUCTS cp1
INNER JOIN CART_PRODUCTS cp2 ON cp1.CART_ID = cp2.CART_ID
WHERE cp1.NAME = 'Milk' AND cp2.NAME = 'Yogurt'
ORDER BY cp1.CART_ID;
'코테 공부 🔥' 카테고리의 다른 글
[백준/파이썬] 2798: 블랙잭 (0) | 2024.05.27 |
---|---|
[백준/파이썬] 1358: 하키 (0) | 2024.05.27 |
[프로그래머스/SQL] FrontEnd 개발자 찾기 (0) | 2024.05.09 |
[프로그래머스/SQL] 조건에 맞는 아이템들의 가격의 총합 구하기 (0) | 2024.05.09 |
[프로그래머스/SQL] Python 개발자 찾기 (0) | 2024.05.09 |
댓글