프로그래머스 Lv.3| Oracle - 헤비 유저가 소유한 장소
문제 설명
PLACES
테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES
테이블의 구조는 다음과 같으며 ID
, NAME
, HOST_ID
는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID
는 기본키입니다.
NAME | TYPE |
---|---|
ID | INT |
NAME | VARCHAR |
HOST_ID | INT |
이 서비스에서는 공간을 둘 이상 등록한 사람을 “헤비 유저”라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.
예시
예를 들어 PLACES
테이블이 다음과 같다면
ID | NAME | HOST_ID |
---|---|---|
4431977 | BOUTIQUE STAYS - Somerset Terrace, Pet Friendly | 760849 |
5194998 | BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly | 760849 |
16045624 | Urban Jungle in the Heart of Melbourne | 30900122 |
17810814 | Stylish Bayside Retreat with a Luscious Garden | 760849 |
22740286 | FREE PARKING - The Velvet Lux in Melbourne CBD | 30900122 |
22868779 | ★ Fresh Fitzroy Pad with City Views! ★ | 21058208 |
- 760849번 유저는 공간을 3개 등록했으므로 이 유저는 헤비유저입니다.
- 30900122번 유저는 공간을 2개 등록했으므로 이 유저는 헤비유저입니다.
- 21058208번 유저는 공간을 1개 등록했으므로 이 유저는 헤비유저가 아닙니다.
따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.
ID | NAME | HOST_ID |
---|---|---|
4431977 | BOUTIQUE STAYS - Somerset Terrace, Pet Friendly | 760849 |
5194998 | BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly | 760849 |
16045624 | Urban Jungle in the Heart of Melbourne | 30900122 |
17810814 | Stylish Bayside Retreat with a Luscious Garden | 760849 |
22740286 | FREE PARKING - The Velvet Lux in Melbourne CBD | 30900122 |
풀이
SELECT
*
FROM
PLACES
WHERE
HOST_ID IN (SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID) >=2)
ORDER BY
ID
;
- 두 번 이상 쓰인 HOST_ID의 정보를 불러와야 합니다. 여기에 저는 HOST_ID를 GROUP BY 절로 그룹화한 뒤 COUNT 함수를 사용해서 그룹화된 개수가 2개 이상인 것을 불러올 것입니다. 그러려면 우선
GROUP BY HOST_ID
를 입력해야 하는데 이것은 메인쿼리에서 사용할 수 없습니다. 왜냐하면 조회할 컬럼(*)과 GROUP BY의 컬럼(HOST_ID)이 일치하지 않기 때문이죠.(ORA-00979
오류가 발생합니다.) 그래서 WHERE 조건절에서 IN()을 사용해 서브쿼리로 작성하였습니다. - 아이디 순 조회 조건을 잊지마세요.