포스트

헤비 유저가 소유한 장소

https://school.programmers.co.kr/learn/courses/30/lessons/77487

문제

  • 문제 풀이
1
2
3
4
5
6
7
8
9
10
11
12
-- 서브쿼리에서 GROUP BY 및 HAVING을 사용하여 중복된 HOST_ID를 찾은 다음, 
-- 이를 기반으로 원래 테이블과 조인한다.
SELECT P.ID, P.NAME, P.HOST_ID
FROM (
    SELECT HOST_ID
    FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(*) >= 2
    ) H
JOIN PLACES P
ON H.HOST_ID = P.HOST_ID
ORDER BY ID;
1
2
3
4
5
6
7
8
9
10
11
-- 서브쿼리에서 GROUP BY 및 HAVING을 사용하여 중복된 HOST_ID를 찾고, 
-- 그 중복된 HOST_ID를 가진 레코드들을 최종 결과에 필터링한다.
SELECT *
FROM PLACES
WHERE HOST_ID IN (
  SELECT HOST_ID
  FROM PLACES
  GROUP BY HOST_ID
  HAVING COUNT(HOST_ID) > 1
)
ORDER BY ID;
1
2
3
4
5
6
7
8
9
10
-- 각 레코드에 대해 서브쿼리를 통해 해당 HOST_ID에 대한 레코드 수를 계산하고, 그 수가 2 이상인 경우에만 반환하는 방식으로 중복된 HOST_ID를 찾는다.
-- 외부 쿼리에서 각 레코드마다 서브쿼리가 실행되므로, 데이터 양이 많아질수록 성능에 영향을 미칠 수 있다.
SELECT *
FROM PLACES A
WHERE (
       SELECT COUNT(*) 
       FROM PLACES B
       WHERE A.HOST_ID = B.HOST_ID
       ) >= 2
ORDER BY ID


  • 실행 결과

실행 결과

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.