SQL 重构查询以使用通用表表达式

示例

假设我们要获得总销售额大于20的所有产品类别。

这是一个没有公用表表达式的查询:

SELECT category.description, sum(product.price) as total_sales
FROM sale
LEFT JOIN product onsale.product_id= product.id
LEFT JOIN category onproduct.category_id= category.id
GROUP BY category.id, category.description
HAVING sum(product.price) > 20

以及使用通用表表达式的等效查询:

WITH all_sales AS (
  SELECT product.price,category.idas category_id,category.descriptionas category_description
  FROM sale
  LEFT JOIN product onsale.product_id= product.id
  LEFT JOIN category onproduct.category_id= category.id
)
, sales_by_category AS (
  SELECT category_description, sum(price) as total_sales
  FROM all_sales
  GROUP BY category_id, category_description
)
SELECT * from sales_by_category WHERE total_sales > 20