with 절은 공통 테이블 표현식(common table expression, CTE)을 정의하는데 사용된다. 쿼리의 일시적인 결과 집합을 정의하며, 이를 다른 select, insert, delete문에서 사용할 수 있다. CTE는 복잡한 쿼리를 단순화하고, 가독성을 높이며, 재귀 쿼리를 작성할 때 유용하다.
기본 구문
with cte_name as (
SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
WHERE 조건
)
select 컬럼1, 컬럼2, ...
from cte_name
중복된 값을 찾고 그 데이터들을 나열하는 문제를 풀다 찾게 되었는데 위 기본 구문을 응용해서 문제르 풀었다.
1.
with 절을 사용해 중복된 값을 찾은 서브쿼리를 만든다.
2.
join을 사용해 원본 테이릅과 서브쿼리를 합쳐 전체 데이터를 조회한다.
작성된 코드는 아래와 같다.
with heavy_user as (
select id, name, host_id
from places
group by host_id
having count(host_id) >= 2
)
select p.id, p.name, p.host_id
from places p
join heavy_user hy on hy.host_id = p.host_id
order by p.id