PostgreSQL 是一种功能强大且广泛使用的开源关系型数据库管理系统。它提供了许多强大的聚合函数,其中之一是 DISTINCT ON,它可以在查询结果中返回基于特定列的唯一值。本文将介绍 DISTINCT ON 的用途、语法和使用案例。用途DISTINCT ON 聚合函数用于从查询结果中返回基于指定列的唯一值。它对于需要获取每个组中的唯一记录非常有用。通常情况下,使用 DISTINCT ON 可以简化复杂的查询,并提高查询性能。语法DISTINCT ON 聚合函数的语法如下所示:
SELECT DISTINCT ON (column_name) column_name, other_column(s)FROM table_nameORDER BY column_name, other_column(s)
在这个语法中,column_name 是要基于其获取唯一值的列名。如果有多个列,可以在 ORDER BY 子句中指定它们的顺序。在查询结果中,只有第一个出现的唯一值会被返回。案例假设我们有一个名为 "employees" 的表,其中包含员工的姓名、部门和工资信息。我们想要获取每个部门中工资最高的员工的记录。使用 DISTINCT ON,我们可以轻松实现这一目标。首先,我们需要创建一个名为 "employees" 的表,并插入一些示例数据:
sqlCREATE TABLE employees ( id serial primary key, name varchar(100), department varchar(100), salary numeric(10,2));INSERT INTO employees (name, department, salary)VALUES ('John Doe', 'Sales', 5000.00), ('Jane Smith', 'Sales', 5500.00), ('Mike Johnson', 'Marketing', 6000.00), ('Amy Williams', 'Marketing', 6500.00), ('Tom Davis', 'IT', 7000.00), ('Emily Brown', 'IT', 7500.00);
现在,我们可以使用 DISTINCT ON 来获取每个部门中工资最高的员工的记录:
sqlSELECT DISTINCT ON (department) department, name, salaryFROM employeesORDER BY department, salary DESC;
这个查询将返回每个部门中工资最高的员工的记录,按照部门名称进行分组,并按照工资降序排序。在本文中,我们介绍了 PostgreSQL 中的 DISTINCT ON 聚合函数的用途、语法和使用案例。DISTINCT ON 可以帮助我们从查询结果中获取基于指定列的唯一值,特别适用于需要获取每个组中的唯一记录的情况。通过使用 DISTINCT ON,我们可以轻松地完成复杂的查询,并提高查询性能。