WITH 의 PostgreSQL 설명서 는 다음 예제를 보여줍니다.
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
), top_regions AS (
SELECT region
FROM regional_sales
WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
product,
SUM(quantity) AS product_units,
SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;
또한 메모 :
WITH 쿼리의 유용한 속성은 부모 쿼리 또는 형제 WITH 쿼리에 의해 두 번 이상 참조되는 경우에도 부모 쿼리 실행 당 한 번만 평가된다는 것입니다.
WITH재귀 평가와 같은 다른 용도로 사용할 수 있다는 것을 알았습니다 . 그러나 위의 예에서 WITH임시 테이블을 사용 하고 만드는 것 사이에 중요한 차이점이 있습니까?
@VaoTsun 쿼리 내에서 사용
—
Nathan Long
TEMPORARY TABLE하는 경우 ON COMMIT DROP쿼리를 수정하고 다시 실행하는 것의 문제입니까? postgresql.org/docs/9.6/static/sql-createtable.html
SELECT에WITH단지 이름을 입력하고 다시 실행됩니다. 임시 테이블을 사용하는 동안DROP및CREATE. 반면에 쿼리를 작성하고 정적 데이터를 여러 번 재사용하려는 경우 인덱스가 포함 된 임시 테이블을 작성하면 CTE에 확실히 도움이됩니다.