PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

7.3. 选择列表 #

7.3.1. 选择列表项
7.3.2. 列别名
7.3.3. DISTINCT 去重

当表表达式(通过 FROM、WHERE 等子句)完成虚拟中间表的计算之后,中间表的各行将被输入到由逗号分隔构成的选择列表(select list)中,以此生成最终呈现给用户的输出结果列。

7.3.1. 选择列表项 #

最简单的选择列表项直接由通配符 * 声明,输出输入表的所有字段。更为普遍的形式是显式指定所需的列名或任意标量计算表达式:

SELECT a, b + c FROM table1;

7.3.2. 列别名 #

可以通过附加 AS 子句为结果集中的输出列指派自定义别名:

SELECT a AS value, b + c AS sum FROM table1;

关键字 AS 可以省略。列别名主要用于为前端应用提供语义清晰的列头名称。请注意,列别名不能直接在同级的 WHERE 或 HAVING 子句中引用(因为在物理执行流上,过滤发生于投影之前),但可以在最外层的 ORDER BY 中直接引用。

7.3.3. DISTINCT 去重 #

在选择列表前声明 DISTINCT 关键字可以从最终结果集中剔除所有内容完全相同的重复行,仅保留单条唯一记录:

SELECT DISTINCT city FROM weather;

PostgreSQL 还支持强大的专属语法 DISTINCT ON:

SELECT DISTINCT ON (location) location, time, report
    FROM weather_reports
    ORDER BY location, time DESC;

该语句在根据指定列(如 location)去重时,能够结合外部的 ORDER BY 明确保证挑选出各组内特定维度的极致行(例如每个观测点时间最新的一条天气上报记录)。