B/Coding Test
[프로그래머스] MySQL - 우유와 요거트가 담긴 장바구니
f_s_t_k
2021. 10. 8. 17:50
https://programmers.co.kr/learn/courses/30/lessons/62284
코딩테스트 연습 - 우유와 요거트가 담긴 장바구니
CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가
programmers.co.kr
1. INNER JOIN을 이용한 방법
SELECT A.CART_ID
FROM CART_PRODUCTS A
INNER JOIN CART_PRODUCTS B ON A.CART_ID=B.CART_ID
WHERE A.NAME LIKE 'Yogurt' AND B.NAME LIKE 'Milk'
2. 서브쿼리를 활용
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
이거 채점하면 정답으로 인정되긴 하는데, 448, 578과 같은 CART_ID가 중복되서 나옴.
DISTINCT를 컬럼에 걸어줘서 해당 문제 해결
SELECT DISTINCT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk' AND
CART_ID IN (SELECT DISTINCT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt')
ORDER BY CART_ID
똑같은데 컬럼에 DISTINCT를 걸고 안걸고 차이.
해당 컬럼에 DISTINCT를 걸면 중복되는 VALUE가 있으면 해당 행을 빼주게 되는데,
두 코드 다 정답으로 인정되는데 후자처럼 DINTINCT 거는게 맞는 거 같음!
WHERE 절에 LIKE, IN 걸 수 있다.
GROUP BY에 조건을 거는 HAVING이랑 비슷한 느낌