👉🏻 문제보러가기
host_id를 기준으로 그룹핑, 등록한 공간의 id가 2이상인 host_id 출력
SELECT host_id FROM Places GROUP BY host_id HAVING COUNT(id) >= 2
1번을 서브쿼리로 활용
SELECT * FROM Places WHERE host_id IN (SELECT host_id FROM Places GROUP BY host_id HAVING COUNT(id) >= 2) ORDER BY id
SELECT * FROM Places P1 JOIN Places P2 ON P1.host_id = P2.host_id
아래와 같이 host_id가 같은 것끼리 테이블이 확장된다.
SELECT * FROM Places P1 JOIN Places P2 ON P1.host_id = P2.host_id WHERE P1.id != P2.id
host_id는 같지만, 공간은 다른(id가 다른) 것끼리만 조인되어 남는다.
#최종 코드 SELECT DISTINCT P1.id, P1.name, P1.host_id FROM Places P1 JOIN Places P2 ON P1.host_id = P2.host_id WHERE P1.id != P2.id ORDER BY P1.id
IN을 이용했던 풀이와 같이, 공간을 둘 이상 등록한 헤비 유저를 찾는다.
SELECT * FROM Places GROUP BY host_id Having COUNT(id) >= 2
EXISTS를 이용하여, 1번 서브쿼리의 결과에 '존재하는' 공간 정보만 출력해준다.
SELECT * FROM Places P1 WHERE EXISTS(SELECT * FROM Places P2 GROUP BY P1.host_id = P2.host_id Having COUNT(id) >= 2) ORDER BY id;
✔️ROW를 비교하여 체크해주기 때문에, JOIN을 해줄 때처럼 특정 컬럼을 기준으로 연동을 해줘야 한다.
-> 따라서 동일한 테이블을 가지고 서브쿼리에서 비교해줄 때는, 위와 같이 alias를 사용하여 분리해줘야 한다.
EXISTS는 조건에 맞는 ROW에 서브쿼리에 존재하는지 체크한다.