본문 바로가기

문돌이 존버/DB 및 SQL 스터디

(프로그래머스 SQL 문제 풀이) 헤비 유저가 소유한 장소

반응형
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
WHERE EXISTS (
    SELECT 1 FROM PLACES P2
    WHERE P1.HOST_ID = P2.HOST_ID
    GROUP BY HOST_ID
    HAVING COUNT(ID) >= 2
)
ORDER BY ID;

두 방식 모두 서브쿼리와 HAVING COUNT()를 사용했다는 점에서 동일하지만 IN절을 사용했느냐, EXISTS절을 사용했느냐에 따라 다르다.

EXISTS절은 해당하는 값이 존재하는지만 체크하기 때문에 존재하는 값을 전부 확인하는 IN절보다 성능이 좋을 것으로 판단된다. SELECT 1이라고 한 것은 단순히 있냐 없냐만 필요한 것으로 컬럼을 써줄 필요가 없기 때문이다.

728x90
반응형