반응형

@notepad_jj2

츄르사려고 코딩하는집사입니다.


1. [프로그래머스/SQL] 헤비 유저가 소유한 장소 오라클(Oracle)

 

2. 문제 출처

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

 

프로그래머스

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

programmers.co.kr

 

3. 문제

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

NAMETYPE

ID INT
NAME VARCHAR
HOST_ID INT

문제

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

 

예시

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

IDNAMEHOST_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 문을 실행하면 다음과 같이 나와야 합니다.

IDNAMEHOST_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

 

4. 풀이

- 간단한 GROUP BY 문제다.

- PLACES 테이블에서, 2개 이상의 룸을 빌린 사람의 데이터를 가져올건데, GROUP BY를 통해 HAVING절을 COUNT(*) >= 2 이상인 HOST_ID를 가져와서 WHERE IN 절에 넣어서 ID를 기준으로 정렬하면 된다.

 

5. 소스 코드

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

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기