每天學點SQL(002) DISTINCT語句


DISTINCT

在表中某列或多列可能會包含重複值,有時可能只關心某列或者任意列是否有哪些不同(distinct)的值。

DISTINCT 語法

<code>SELECT DISTINCT 列名稱 FROM 表名稱/<code>

其中DISTINCT 是關鍵字,用於返回唯一不同的值。

DISTINCT 示例

假設表名students包含以下幾個字段:

每天學點SQL(002) DISTINCT語句

其中,各字段定義為:sid為學生ID、name為姓名、gender為性別,age為年齡,province為所在省份,city為所在城市,district為所在區 (NULL表示未上報)。

DISTINCT 只對一個字段去重

只對一個字段去重,這種操作是最常見和簡單的。表示選取該字段所在列不重複的數據。

<code>SELECT DISTINCT province FROM students/<code>

該語句只對 province 字段去重,表示查詢學生來自於哪幾個省份,結果如右側所示。

每天學點SQL(002) DISTINCT語句

DISTINCT 對多個字段去重

當 DISTINCT 應用到多個字段時,其應用的範圍是其後面的所有字段,而不是緊挨著它的一個字段; DISTINCT 只能放到所有字段的前面。

<code>SELECT DISTINCT province, city FROM students/<code>

該語句對 province,city 字段去重,表示查詢學生來自於哪幾個省份、城市,結果如右側所示。

每天學點SQL(002) DISTINCT語句

DISTINCT 對*(星花)的去重

星花 * 代表所有的列,使用 distinct 對 * 去重,相當於對所有列去重。

<code>SELECT DISTINCT * FROM students/<code>
<code>SELECT DISTINCT sid, name,  gender, age,  province,  city,  district  
FROM students/<code>

DISTINCT 對NULL值的去重

DISTINCT 對 NULL 是不進行過濾的,即返回結果中是包含 NULL 值的。

<code>SELECT DISTINCT district FROM students/<code>

該語句對 district 字段去重,結果如右側所示。

每天學點SQL(002) DISTINCT語句

DISTINCT 在聚合函數中使用

在聚合函數中 DISTINCT 一般與 COUNT 結合使用, 且 COUNT 會過濾掉 NULL 值。

<code>SELECT COUNT(DISTINCT district) 
FROM students/<code>

實際包含 NULL 有6個不同的記錄,執行語句後過濾掉 NULL 值,計算結果為5。

每天學點SQL(002) DISTINCT語句


碎片時間,關注收藏。


分享到:


相關文章: