PostgreSQL - DISTINCT 关键字:初学者指南

你好,未来的数据库大师们!今天,我们将深入 PostgreSQL 的奇妙世界,探索一个名为 DISTINCT 的神奇小关键字。如果你之前从未编写过一行代码,不用担心——我将是你在这次旅程中的友好向导,到了最后,你将能够像专业人士一样使用 DISTINCT!

PostgreSQL - Distinct Keyword

什么是 DISTINCT,我们为什么需要它?

想象你是一位图书馆管理员(请跟随我的思路),在一个庞大的图书馆里。你的上司让你统计图书馆中有多少不同的作者。你肯定不想因为一个作者写了多本书就重复计数,对吧?这就是 DISTINCT 在数据库世界中派上用场的地方。

在 PostgreSQL 中,DISTINCT 关键字用于从结果集中移除重复行。它就像一个神奇的过滤器,只显示给你唯一的值。很酷吧?

语法:如何使用 DISTINCT

让我们从 DISTINCT 的基本语法开始。别担心,它比你想象的要简单!

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

每个部分的含义如下:

  • SELECT:这告诉 PostgreSQL 我们想要检索数据。
  • DISTINCT:我们的大明星!它从结果中移除重复项。
  • column1, column2, ...:你想要选择的列。
  • FROM table_name:你正在选择的表。

示例:DISTINCT 的实际应用

示例 1:基本的 DISTINCT 使用

假设我们有一个名为 books 的表,包含列 titleauthorgenre。我们想知道图书馆中所有的独特类型。

SELECT DISTINCT genre
FROM books;

这个查询将给我们一个所有独特类型的列表,无论每个类型中有多少本书。如果我们有 1000 本书但只有 5 种不同的类型,我们只会看到这 5 种类型各列出一次。

示例 2:使用多个列的 DISTINCT

现在,如果我们想看到所有独特的作者-类型组合呢?我们可以使用多个列的 DISTINCT:

SELECT DISTINCT author, genre
FROM books;

这将显示每个独特的作者和类型的组合。如果一个作者写多种类型,他们将多次出现,但每种类型只会出现一次。

示例 3:与 ORDER BY 结合的 DISTINCT

让我们给查询添加一点调料。我们可以将 DISTINCT 与 ORDER BY 结合起来对结果进行排序:

SELECT DISTINCT genre
FROM books
ORDER BY genre ASC;

这个查询将给我们一个所有独特类型的列表,按字母顺序排序。就像整理图书馆的书架!

示例 4:与 COUNT 结合的 DISTINCT

这里有一个酷炫的技巧:我们可以使用 COUNT 与 DISTINCT 一起计算唯一值:

SELECT COUNT(DISTINCT author) AS unique_authors
FROM books;

这将告诉我们图书馆中有多少不同的作者。就像在问,“我需要收集多少位作者签名,才能收集到图书馆中每位作者的签名?”

使用 DISTINCT 的常见方法

下面是一个总结使用 DISTINCT 的常见方法的表格:

方法 描述 示例
基本DISTINCT 从单个列中移除重复项 SELECT DISTINCT genre FROM books;
多列DISTINCT 基于多个列移除重复项 SELECT DISTINCT author, genre FROM books;
与ORDER BY结合的DISTINCT 移除重复项并对结果进行排序 SELECT DISTINCT genre FROM books ORDER BY genre;
与COUNT结合的DISTINCT 计算唯一值 SELECT COUNT(DISTINCT author) FROM books;
DISTINCT ON 保留每组重复项的第一行 SELECT DISTINCT ON (genre) genre, title FROM books ORDER BY genre, title;

实用技巧和建议

  1. 性能考虑:虽然 DISTINCT 非常有用,但在大型数据集上可能会减慢查询速度。明智地使用它!

  2. NULL 值:DISTINCT 将 NULL 视为唯一值。所以如果你的列中有多个 NULL 值,DISTINCT 会保留其中一个。

  3. 与 WHERE 结合:你可以将 DISTINCT 与 WHERE 子句结合使用。例如:

    SELECT DISTINCT genre
    FROM books
    WHERE author = 'J.K. Rowling';

    这将显示 J.K. Rowling 写过的所有独特类型。

  4. DISTINCT 与 GROUP BY:有时,你可以使用 DISTINCT 或 GROUP BY 达到相同的结果。对于简单的情况,DISTINCT 通常更直接。

结论:DISTINCT 的力量

就这样,朋友们!你刚刚解锁了 PostgreSQL 中 DISTINCT 的力量。从移除重复项到计算唯一值,DISTINCT 就像是你 SQL 工具包中的瑞士军刀。

记住,掌握 DISTINCT(以及 SQL 本身)的关键是练习。尝试创建你自己的表并尝试不同的 DISTINCT 查询。在你意识到之前,你将像数据库侦探一样区分数据!

继续查询,继续学习,最重要的是,享受其中的乐趣。毕竟,每一次伟大的数据库旅程都是从一条 SELECT 语句开始的。快乐编码!

Credits: Image by storyset