레벨 3
https://programmers.co.kr/learn/courses/30/lessons/77487
먼저 헤비유저를 조회하는 쿼리를 짰다.
# cnt>=2인 host id 테이블
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*)>=2
ORDER BY ID;
위 쿼리를 서브쿼리로 이용하면 되겠다 싶어서 서브쿼리를 활용하는 방안에 대해 생각했다.
1. 위 쿼리로 테이블을 따로 생성하고 조인해서 사용하는 방법
2. WHERE 절에 조건으로 서브쿼리를 다는 법
두 가지 방법으로 모두 풀어봤다.
WHERE 절에 조건으로 서브쿼리를 달 때 주의해야할 문법이 있다.
서브쿼리가 단일 행일 경우, WHERE ID = (SELECT ~)
서브쿼리가 다중 행일 경우, WHERE ID IN (SELECT ~)
이렇게 사용해야 한다.
다중행일 경우 IN 뿐만 아니라 ANY, ALL, EXISTS 연산자 사용가능하다.
1) 서브쿼리 조인
SELECT P.ID, P.NAME, P.HOST_ID
FROM PLACES P
JOIN
(SELECT HOST_ID, COUNT(*) AS CNT
FROM PLACES
GROUP BY HOST_ID
HAVING CNT>=2) P2
ON P.HOST_ID = P2.HOST_ID
ORDER BY P.ID;
2) 서브쿼리 WHERE절
SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*)>=2)
ORDER BY ID;