본문 바로가기
Study/코딩테스트

[프로그래머스 / 2021 Dev-Matching: 웹 백엔드 개발자(상반기) / SQL ] 헤비 유저가 소유한 장소

by 까다로운오리 2022. 2. 17.

문제 

https://programmers.co.kr/learn/courses/30/lessons/77487#_=_

 

코딩테스트 연습 - 헤비 유저가 소유한 장소

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

programmers.co.kr

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

 

 

 

풀이 코드

SELECT *
FROM PLACES
WHERE HOST_ID IN 
(SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID)>=2)
ORDER BY ID

 

풀이 과정

1. 출력되는 값은 ID, NAME, HOST_ID 이고 PLACES라는 테이블에서 다음 열들을 가져 온다.

2. 문제 조건은 HOST_ID의 갯수가 2 이상인 값들만 출력하도록 되어있기 때문에 HOST_ID값이 2 이상인 HOST_ID값을 가져오기 위해 서브 쿼리를 만든다. 해서 HOST_ID값 중 서브쿼리에 속해있는 값만 출력되도록 WHERE문에 조건을 써 넣는다.

3. ID순으로 조회해야되기 때문에 ORDER BY ID를 해준다.

 

서브쿼리

1.  HOST_ID값을 카테고리 값 별로 COUNT 하기위해 HOST_ID의 값을 GROUP BY로 묶는다.

2. COUNT는 집계 함수로 '공간을 둘 이상 등록한 사람을 "헤비 유저"' 라고 칭하기 때문에 HAVING절에 COUNT(HOST_ID) 한 값이 2 이상인 경우만 SELECT 하는 조건식을 세워준다.

 

 

끝!