본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 헤비 유저가 소유한 장소

by kime2 2024. 1. 26.
출처

 

문제

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

문제에 대한 해석

-- 조건: 공간에 2개 이상 등록한 사람 = 헤비유저
-- 조회: 헤비유저가 등록한 공간의 정보
-- 정렬: 아이디

풀이(MYSQL)

with temp as (
    select host_id, count(1)
    from places
    having count(1)>1
)
select p.id, p.name, t.host_id
from places p join temp t
on p.host_id = t.host_id

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. WITH 절: host_id 그룹화 하여 host_id별로 등록된 장소룰 count(1)개수한고, 개수된 장소가 2개 이상을 조건으로 필터링한 host_id(=헤비유저)를 조회한다 -> temp테이블 
  2. FROM 절: temp테이블과 places테이블을 host_id를 기준으로 inner join 하여 헤비유저의 데이터를 가져온다
  3. SELECT 절: (헤비유저의 host_id(임시테이블에서 조회된를 기준으로) id, name, host_id
  4. ORDER BY 절: id순으로 오름차순

 

다른사람 풀이

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

배운점

  • 테이블에서 조건이 필요할 경우 해단 조건을 만족하는 with절/서브쿼리/where절 응용