DISTINCT 中 PostgreSQL:选择、排序和限制(示例)

⚡ 智能摘要

DISTINCT 中 PostgreSQL 用于 SELECT 语句以删除重复行并仅返回唯一值。它涵盖了 SELECT 语法、SQL Shell 和 pgAdmin、单列和多列的 DISTINCT 语句,以及 DISTINCT 与 GROUP BY 的区别。

  • 🔎 选择: 使用 SELECT column FROM table 从表中检索列。
  • 🧹 清楚的: 删除重复行,每个唯一值保留一行。
  • ↕️ 订购者: 默认按升序排序,或按降序排序(DESC)。
  • 🔢 限制: 限制查询返回的记录数。
  • 🖥️ 工具: 在 SQL Shell 或 pgAdmin 中运行相同的查询。

DISTINCT 中 PostgreSQL

您可以使用 SELECT 语句从表中检索数据。

语法:

SELECT [column names] FROM [table_name]

在这里,

  • 列名: 要检索其值的列的名称。
  • 从: FROM 子句为 SELECT 定义一个或多个源表。
  • 表名: 要查询的现有表的名称。

什么是 DISTINCT? PostgreSQL?

DISTINCT, 条款在 PostgreSQL 与 SELECT 语句一起使用,可以从结果集中删除重复行。当列包含重复值时,SELECT DISTINCT 只返回唯一值。ping 每组重复项对应一行。当您需要一份不包含重复项的唯一条目列表时,例如唯一的客户所在城市或产品类别,这种方法非常有用。

DISTINCT 函数会评估 SELECT 语句中列出的所有列,以确定某一行是否唯一。 PostgreSQL 它还提供了 DISTINCT ON 函数,该函数返回指定表达式中每个不同值对应的第一行。您可以将 DISTINCT 与 ORDER BY 结合使用来控制要显示的行,也可以与 LIMIT 结合使用来限制结果数量。

PostgreSQL SQL Shell 中的 Select 语句

步骤1) 我们有一个名为“tutorials”的表,包含两列:“id”和“tutorial_name”。让我们查询一下这个表。使用以下查询语句列出表中的数据:

SELECT id,tutorial_name FROM tutorials;

PostgreSQL SQL Shell 中的 Select 语句

注意: 使用命令 \c 连接到包含要查询的表的数据库。在本例中,我们连接到数据库 guru99。

步骤2) 如果要查看特定表格中的所有列,可以使用星号 (*) 通配符。这意味着它会检查所有可能性,因此会返回所有列。

SELECT * FROM tutorials;

PostgreSQL SQL Shell 中的 Select 语句

它显示教程表的所有记录。

步骤3) 您可以使用 ORDER 子句根据特定列对表中的数据进行排序。ORDER 子句按 A 到 Z 的顺序组织数据。

SELECT * FROM tutorials ORDER BY id;

PostgreSQL SQL Shell 中的 Select 语句

您可以在“ORDER BY”语句后使用“DESC”从 Z 到 A 排序。

SELECT * FROM tutorials ORDER BY id DESC;

PostgreSQL SQL Shell 中的 Select 语句

步骤4) SELECT DISTINCT 在 PostgreSQL 子句可用于从结果中删除重复的行。它为每组重复项保留一行。

Syntax:
SELECT DISTINCT column_1 FROM table_name;

让我们使用 DISTINCT 查询从 Postgres 表中选择不同的 id 值,教程如下。 PostgreSQL:

SELECT DISTINCT(id) FROM tutorials;

PostgreSQL SQL Shell 中的 Select 语句

步骤5) 您可以使用 PostgreSQL LIMIT 子句用于限制 SELECT 查询返回的记录数。

SELECT * FROM tutorials LIMIT 4;

PostgreSQL SQL Shell 中的 Select 语句

PostgreSQL pgAdmin 中的选择语句

步骤1) 在对象树中:

  1. 右键单击表格。
  2. 选择脚本。
  3. 点击“选择脚本”。

PostgreSQL pgAdmin 中的选择语句

步骤2) 右侧面板中:

  1. 如有需要,请编辑 SELECT 查询语句。
  2. 点击闪电图标。
  3. 观察输出结果。

PostgreSQL pgAdmin 中的选择语句

对多列进行去重

SELECT DISTINCT 子句也可以应用于多个列。当您在 DISTINCT 后列出多个列时, PostgreSQL 将这两列组合视为一个整体,并删除该组合重复的行。

Syntax:
SELECT DISTINCT column_1, column_2 FROM table_name;

例如,要从 tutorials 表中返回 tutorial_name 和 id 的唯一组合:

SELECT DISTINCT tutorial_name, id FROM tutorials;

在这种情况下,只有当 tutorial_name 和 id 都与另一行匹配时,才会删除该行。如果两行具有相同的 tutorial_name 但 id 值不同,则两者都会保留,因为组合仍然是唯一的。务必记住这一点:当选择多个列时,DISTINCT 函数不会对单个列进行去重;它会对所有选定的列一起进行去重。

DISTINCT 与 GROUP BY 的区别 PostgreSQL

DISTINCT 和 GROUP BY 都可以删除重复值,但它们的用途不同:

  • DISTINCT, 仅返回结果中的唯一行,最适合只需要去重列表的情况。
  • 通过...分组 将具有相同值的行分组,以便您可以应用聚合函数,例如 COUNT、SUM 或 AVG 到每个小组。

例如,以下两个查询都返回唯一的 id 值:

SELECT DISTINCT id FROM tutorials;
SELECT id FROM tutorials GROUP BY id;

对于仅包含唯一值的列表,请使用 DISTINCT;而当需要对每个分组进行计算时,例如统计有多少教程共享同一个 ID,则应使用 GROUP BY。对于简单的查询,两者的性能通常相近,但只要涉及聚合,就必须使用 GROUP BY。

备忘单

SELECT [column names] FROM [table_name] [clause]

以下是各项参数:

  • 列名: 要检索其值的列的名称。
  • 从: FROM 子句为 SELECT 定义一个或多个源表。
  • 表名: 要查询的现有表的名称。

各项条款如下:

命令 描述
* 获取表中所有行的记录。
DISTINCT, DISTINCT 中 PostgreSQL 帮助您从结果中删除重复项。
ORDER BY 根据指定列对行进行排序。默认排序方式为升序。使用关键字 DESC 可按降序排序。
极限 限制 PostgreSQL 限制查询返回的记录数。

常见问题

是的。AI 助手可以将描述转换为 SELECT DISTINCT 语句,添加 ORDER BY 或 LIMIT 子句,并解释结果。不过,在生产环境中运行查询之前,您仍然应该在自己的数据库架构上进行测试。

是的。AI 工具可以读取 EXPLAIN ANALYZE 的查询计划,并建议创建索引或将 DISTINCT 子句重写为 GROUP BY。务必使用真实数据验证这些建议,因为性能取决于表的大小和索引。

DISTINCT 函数会删除所有选定列中的重复行。DISTINCT ON (表达式) 函数会保留该表达式每个不同值对应的第一行,允许您为每个分组选择一行,通常与 ORDER BY 子句结合使用。

在大表上,DISTINCT 函数的运行速度可能会比较慢,因为它需要比较并删除重复项,通常需要使用排序或哈希算法。建立合适的索引并限制选择的列有助于降低其运行成本。

总结一下这篇文章: