본문 바로가기
Stay Hungry Stay Foolish/SQL

[MYSQL] 우유와 요거트가 담긴 장바구니

by HANNI하니 2023. 10. 4.

사용 언어 - MYSQL

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

https://school.programmers.co.kr/learn/courses/30/lessons/62284

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

정답

서브쿼리, DISTINCT (정답 맞춘 여부 O

1. FROM 서브쿼리절에서 NAME이 우유나 요거트인 경우에만 뽑아주기

2. CART_ID로 그루핑한 후 개수 세주기만 했더니, 오류 뜬다. 우유만 두개, 요거트만 두개있는 경우가 있기 때문!!!

3. FROM 서브쿼리절에서 뽑을 때 애초에 DISTINCT를 걸어서 중복인 친구들을 제거해주면,

4. 우유&요거트가 각각 1개 이상 무조건 들어있는 장바구니를 뽑을 수 있다.

SELECT CART_ID
FROM (
    SELECT DISTINCT CART_ID, NAME
    FROM CART_PRODUCTS
    WHERE NAME IN ('Milk', 'Yogurt')
) AS C
GROUP BY CART_ID
HAVING COUNT(*) >= 2;

 

충격적인 정답

HAVING COUNT(DISTINCT NAME) = 2

굳이 FROM 서브쿼리절을 사용하지 않아도 HAVING을 할 때 DISTINCT되어 개수를 세준다..

SELECT CART_ID
  FROM CART_PRODUCTS
 WHERE NAME IN ('Milk','Yogurt')
 GROUP BY CART_ID
 HAVING COUNT(DISTINCT NAME)=2
 

[프로그래머스][MySQL]우유와 요거트가 담긴 장바구니(Summer/Winter Coding(2019) )

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가

velog.io

 

 

레퍼런스

  • 정답 깃허브
 

https://github.com/yyeongeun/codingtest/blob/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%20MYSQL/%EC%9A%B0%EC%9C%A0%EC%99%80%EC%9A%94%EA%B1%B0%ED%8A%B8%EA%B0%80%EB%8B%B4%EA%B8%B4%EC%9E%A5%EB%B0%94%EA%B5%AC%EB%8B%88.sql

 

댓글