📜  PostgreSQL-WITH子句(1)

📅  最后修改于: 2023-12-03 15:33:45.810000             🧑  作者: Mango

PostgreSQL WITH子句

在 PostgreSQL 中,WITH 子句用于创建一个临时命名的结果集,该结果集可以由主查询或其他子查询引用。WITH 中定义的临时结果集可以被认为是一个虚拟表,这个虚拟表可以在查询的其余部分中使用,类似于一张表。WITH 子句也被称为公共表表达式或CTE。

语法

WITH expression_name [ (column_name [, ...]) ] AS ( [SELECT | VALUES] select_statement ) [, ...]

示例

下面是一个使用 WITH 子句的简单示例:

WITH sales_totals AS (
  SELECT region, SUM(amount) as total_sales
  FROM sales
  GROUP BY region
)
SELECT region, total_sales
FROM sales_totals
ORDER BY total_sales DESC;

在上面的查询中,一个名为 sales_totals 的虚拟表被创建,并用 SELECT 语句从 sales 表中汇总数据,计算每个地区的总销售额。然后在主查询中使用了这个虚拟表,并按总销售额从高到低排序结果。

WITH 子句还可以与其他 SQL 功能如 UNION、JOIN 和 Window 函数一起使用,从而实现更强大的查询。

使用 WITH 子句的好处

使用 WITH 子句可以让查询变得更加模块化和易于理解。通过给子查询定义一个名称,可以让查询更易于阅读和维护。此外,还可以通过重复使用子查询中的结果来提高性能。如果在多个查询中使用相同的子查询,则执行计划可以将这些结果缓存到内存中,以便下次使用该子查询时更快地运行查询。

如果您正在编写复杂的查询,需要多次引用相同的子查询,并且希望查询可读性和维护性更好,并且性能更好,那么您应该尝试使用 WITH 子句。