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:DISTINCT 與 ORDER BY 的組合

讓我們來點刺激的。我們可以將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;
DISTINCT 與 ORDER BY 的組合 刪除重複並對結果進行排序 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