📚 目录

  1. 概述
  2. 基本语法
  3. 使用 DISTINCT 关键字
  4. 在多个列上使用 DISTINCT
  5. DISTINCT ON 使用
  6. 性能注意事项
  7. 参考资料

🛠️ 概述

DISTINCT 关键字用于在查询结果中去除重复的记录。它可以帮助你仅返回唯一的行。DISTINCT 通常用于避免在查询中返回相同的记录,尤其在处理大量数据时,非常有用。


📝 基本语法

DISTINCT 关键字的基本语法如下:

SELECT DISTINCT column1, column2, ...
FROM table_name;

  • column1, column2, ...:你希望返回唯一值的列。
  • table_name:查询的表名。

🔢 使用 DISTINCT 关键字

DISTINCT 最常见的用途是去除查询结果中的重复值。如果你只关心某一列或多列中的唯一记录,可以使用 DISTINCT

示例(返回唯一的部门名称):

SELECT DISTINCT department
FROM employees;

该查询将返回 employees 表中不重复的部门名称。

示例(返回唯一的部门名称和职位组合):

SELECT DISTINCT department, position
FROM employees;

此查询将返回不重复的部门和职位组合。


🔢 在多个列上使用 DISTINCT

你可以在多个列上使用 DISTINCT,它会去除所有列组合中重复的记录。只有当多列组合的值完全相同,才会被认为是重复的。

示例(返回不重复的部门和薪资组合):

SELECT DISTINCT department, salary
FROM employees;

此查询将返回唯一的部门和薪资组合。


🔄 与 DISTINCT ON 使用

DISTINCT ON 是 PostgreSQL 特有的功能,它允许你从查询结果中选择每个分组的第一个行,而不是完全去除所有重复的行。DISTINCT ON 可以按某些列对结果进行去重,并选择每个分组中的第一行。

示例(按部门选择薪资最高的员工):

SELECT DISTINCT ON (department) department, name, salary
FROM employees
ORDER BY department, salary DESC;

此查询将返回每个部门薪资最高的员工。DISTINCT ON (department) 确保每个部门只有一条记录,并且选择薪资最高的员工(通过 ORDER BY 排序实现)。


🧑‍💻 性能注意事项

  • 性能影响:使用 DISTINCT 关键字时,数据库需要对查询结果进行去重操作,可能会对性能产生一定影响,尤其是在大数据量时。适当使用索引可以提高去重操作的效率。
  • 避免冗余使用:在某些情况下,DISTINCT 可能并不必要,尤其是当数据本身已经没有重复时。只在需要时使用 DISTINCT 以避免不必要的性能开销。

📘 参考资料