헤비 유저가 소유한 장소
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 라이센스를 따릅니다.