📜  PostgreSQL – DISTINCT ON 表达式(1)

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

PostgreSQL – DISTINCT ON 表达式

在 PostgreSQL 中,DISTINCT ON 可以根据指定的表达式在查询结果中去重。这在需要查找特定字段最新值的场景下非常有用。

语法
SELECT DISTINCT ON (expression) column1, column2, ...
FROM table_name
WHERE condition
ORDER BY expression, column1, column2, ...;
  • expression: 指定去重的表达式
  • column1, column2, ...: 需要查询的字段
  • table_name: 查询的表名
  • condition: 查询条件,可选
  • ORDER BY: 按照指定的表达式和字段排序,以便获取最新的记录
例子

假设我们有一个存储学生成绩的表,包含学号、科目、成绩和日期四个字段。现在我们要查询每个科目中最新的成绩。

我们可以使用以下 SQL 语句:

SELECT DISTINCT ON (subject) subject, score, date
FROM grades
ORDER BY subject, date DESC;

这个语句将返回每个科目中最新的成绩记录,并按照科目名称和日期排序。如果我们只想获取某个学生的最新成绩,可以添加 WHERE 子句。

SELECT DISTINCT ON (subject) subject, score, date
FROM grades
WHERE student_id = '123456'
ORDER BY subject, date DESC;
注意事项
  • DISTINCT ON 只能用于查询中指定的表达式及其相关字段的去重
  • ORDER BY 中的表达式必须与 SELECT 中的表达式一致
  • 每个不同的表达式值的第一行将被返回
  • 如果需要获取整个记录,请在 SELECT 中添加 * 符号

总之,DISTINCT ON 是一个非常实用的 PostgreSQL 特性,在处理需要获取最新记录的场景下非常有用。