출처
문제
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 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 ->결과반환
- WITH 절: host_id 그룹화 하여 host_id별로 등록된 장소룰 count(1)개수한고, 개수된 장소가 2개 이상을 조건으로 필터링한 host_id(=헤비유저)를 조회한다 -> temp테이블
- FROM 절: temp테이블과 places테이블을 host_id를 기준으로 inner join 하여 헤비유저의 데이터를 가져온다
- SELECT 절: (헤비유저의 host_id(임시테이블에서 조회된를 기준으로) id, name, host_id
- 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절 응용
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 주문량이 많은 아이스크림들 조회하기 (1) | 2024.01.29 |
---|---|
[문제풀이] 우유와 요거트가 담긴 장바구니 (0) | 2024.01.26 |
[문제풀이] 자동차 평균 대여 기간 구하기 (1) | 2024.01.26 |
[문제풀이] 서울에 위치한 식당 목록 출력하기 (1) | 2024.01.25 |
[문제풀이] 자동차 대여 기록에서 장기/단기 대여 구분하기 (1) | 2024.01.25 |