MySQL Distinct 去掉查詢結果重復記錄
DISTINCT
使用 DISTINCT 關鍵字可以去掉查詢中某個字段的重復記錄。
語法:
SELECT DISTINCT(column) FROM tb_name
例子:
假定 user 表有如下記錄:
uid username 1 小李 2 小張 3 小李 4 小王 5 小李 6 小張
SQL 語句:
SELECT DISTINCT(username) FROM user
返回查詢結果如下:
username 小李 小張 小王
提示
使用 DISTINCT 關鍵字去掉重復記錄具有較大的局限性。DISTINCT() 只能包含一個字段且查詢結果也只返回該字段而非數據完整記錄(如上例所示)。
可以嘗試使用如下語法:
SELECT DISTINCT(column),column1,column2,... FROM tb_name
該查詢結果將返回列出的所有字段,但該查詢往往使 column 的唯一性失效,且 column 1,column 2,… 不能放在 DISTINCT(column) 之前。
上面的例子如果要返回如下結果(這往往是期望中的):
uid username 1 小李 2 小張 3 小王
這時候就要用到 GROUP BY 關鍵字。
MySQL Group By 數據分組
GROUP BY
MySQL中 使用 GROUP BY 關鍵字用於對某個或某些字段查詢分組,並返回重復記錄的第一條。
語法:
SELECT column,... FROM tb_name GROUP BY column1,column2 ...
user 表記錄如下:
uid username 1 小李 2 小張 3 小李 4 小王 5 小李 6 小張
對上面的 user 表做查詢如下:
SELECT * FROM user GROUP BY username
返回查詢結果如下:
uid username 1 小李 2 小張 3 小王
說明
GROUP BY 語法在 MySQL 數據庫中的用法與其他數據庫相差較大。對於標准 SQL 而言,GROUP BY 一定要結合聚合函數使用,而且選擇的字段除了聚合函數外,還必須在 GROUP BY 中出現。但是在 MySQL 中擴展了 GROUP BY 的功能:
不加聚合函數的情況下,返回的結果是 GROUP BY 結果集中第一行,如上面例子所示。
GROUP BY 結合聚合函數的時候,選擇的字段不必在 GROUP BY 中存在,MySQL 具有隱含字段的功能。
所以我們可以根據 MySQL 對 GROUP BY 的擴展特性,結合另外一些關鍵字如 ORDER BY 等,方便的得到想要的查詢結果。
例子 2:
SELECT * FROM user GROUP BY username,uid
返回查詢結果如下:
uid username 1 小李 3 小李 5 小李 2 小張 6 小張 4 小王