[프로그래머스][MySQL]해비 유저가 소유한 장소(2021 Dev-Matching)

주연·2022년 1월 24일
0

SQL 문제 풀이

목록 보기
5/28
post-thumbnail
post-custom-banner

문제

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

NAMETYPE
IDINT
NAMEVARCHAR
HOST_IDINT

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

예시
예를 들어, PLACES 테이블이 다음과 같다면

IDNAMEHOST_ID
4431977BOUTIQUE STAYS - Somerset Terrace, Pet Friendly760849
5194998BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly760849
16045624Urban Jungle in the Heart of Melbourne30900122
17810814Stylish Bayside Retreat with a Luscious Garden760849
22740286FREE PARKING - The Velvet Lux in Melbourne CBD30900122
22868779★ Fresh Fitzroy Pad with City Views! ★21058208

760849번 유저는 공간을 3개 등록했으므로 이 유저는 헤비유저입니다.
30900122번 유저는 공간을 2개 등록했으므로 이 유저는 헤비유저입니다.
21058208번 유저는 공간을 1개 등록했으므로 이 유저는 헤비유저가 아닙니다.
따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

IDNAMEHOST_ID
4431977BOUTIQUE STAYS - Somerset Terrace, Pet Friendly760849
5194998BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly760849
16045624Urban Jungle in the Heart of Melbourne30900122
17810814Stylish Bayside Retreat with a Luscious Garden760849
22740286FREE PARKING - The Velvet Lux in Melbourne CBD30900122

풀이

답1(나)

WITH HEAVY AS (
    SELECT HOST_ID, COUNT(*)
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(HOST_ID) > 1)
    
SELECT ID, NAME, H.HOST_ID
FROM PLACES AS P, HEAVY AS H
WHERE P.HOST_ID = H.HOST_ID
ORDER BY ID


답2(다른사람 참고)_ WHERE 조건 사용

select *
from places
where host_id in (
	select host_id
	from places
	group by host_id
	having count(*) >= 2
)
order by id


답3(다른사람 참고)_JOIN 사용

SELECT ID, NAME, h.HOST_ID 
FROM PLACES AS p
JOIN (
    SELECT HOST_ID 
    FROM PLACES 
    GROUP BY HOST_ID 
    HAVING COUNT(HOST_ID) > 1
) AS h
ON p.HOST_ID = h.HOST_ID 
ORDER BY ID
profile
공부 기록
post-custom-banner

0개의 댓글