프로그래머스 SQL 문제풀이

JunHyeok Oh·2021년 7월 15일
0

프로그래머스 SQL 문제풀이 (우유와 요거트가 담긴 바구니 , 헤비유저가 소유한 장소 )

1. 우유와 요거트가 담긴 바구니

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

NAMETYPE
IDINT
CART_IDINT
NAMEVARCHAR
PRICEINT

데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.

풀이

SELECT B.CART_ID FROM 
(SELECT A.CART_ID FROM CART_PRODUCTS AS A
WHERE NAME = 'Milk' OR NAME = 'Yogurt'
GROUP BY CART_ID HAVING COUNT(DISTINCT NAME)>=2) AS B
ORDER BY CART_ID
  • 장바구니의 아이디를 조회를 조건이 걸려있는 서브쿼리로 부터 추출하는 것이 이 풀이의 핵심이다.
  • 서브쿼리는 NAME 컬럼이 'Milk' 혹은 'Yogurt' 이고, GROUP BY를 통해 그룹화를 시켰을 때 2개 이상의 고유값을 가진 CART_ID를 조회하는 쿼리이다.
  • 서브쿼리는 B 라는 이름을 가지고, 이름이 고유값 2개 이상을 가진다는 것은 우유와 요거트를 둘 다 포함한다는 의미를 가진다. ( 우유와 요거트만 조회했기 때문에 )
  • 장바구니의 아이디 컬럼을 기준으로 오름차순 정렬했다.



2. 헤비 유저가 소유한 장소

PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID는 기본키입니다.

NAMETYPE
IDINT
NAMEVARCHAR
HOST_IDINT

이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.

풀이

SELECT ID , NAME , HOST_ID FROM PLACES
WHERE HOST_ID 
IN (SELECT  HOST_ID FROM PLACES
    GROUP BY HOST_ID HAVING COUNT(NAME) >= 2 )
ORDER BY ID
  • 공간을 둘 이상 등록한 사람인 헤비 유저를 조회하는 서브쿼리를 조건절에 넣고, 그 조건에 맞는 데이터를 조회하는 풀이 방법이다.
  • 서브쿼리는 HOST_ID 컬럼을 기준으로 그룹화시켰을 때, 2개 이상의 행을 가진 HOST_ID를 조회한다.
  • ID를 기준으로 오름차순 정렬했다.
profile
Univ of Seoul , Statistics

0개의 댓글

관련 채용 정보