코딩테스트/SQL

[SQL] 헤비 유저가 소유한 장소

박소민 2025. 4. 20. 01:04
헤비 유저가 소유한 장소
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

  • 내 풀이
    • GROUP BY + JOIN
    • HOST_ID 로 그룹핑한 값이 2개 이상인 사람을 구해서
    • 해당 사람의 모든 공간을 출력하도록 함
SELECT P1.ID, P1.NAME, P1.HOST_ID
FROM PLACES P1
JOIN (SELECT *
    FROM PLACES
    GROUP BY 3
    HAVING COUNT(*)>1) AS P2
ON P1.HOST_ID = P2.HOST_ID
ORDER BY 1 ASC

 

 

  • 다른 사람 풀이
    • GROUP BY + IN
    • IN 절은 해당 조건 내의 모든 값을 확인
      • ⇒ 실제 존재하는 데이터들의 모든 값까지 확인
SELECT * FROM PLACES
WHERE HOST_ID IN(
    SELECT HOST_ID FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(ID) >= 2
)
ORDER BY ID ASC;

 

  • GROUP BY + EXISTS
    • EXISTS : 해당 값이 존재하는 가에 대한 여부만을 판별
      • P1.HOST_ID가 PLACES 테이블 안에 존재하는지만 확인
      • 리스트 전체를 만드는 게 아니라, 찾자마자 TRUE면 바로 탈출
SELECT * 
FROM PLACES P1
WHERE EXISTS (
    SELECT 1 
    FROM PLACES P2
    WHERE P1.HOST_ID = P2.HOST_ID
    GROUP BY P2.HOST_ID
    HAVING COUNT(*) >= 2
)