본문 바로가기

B/Coding Test

[프로그래머스] MySQL - 우유와 요거트가 담긴 장바구니

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이랑 비슷한 느낌