[英]DISTINCT as a clause or a function
我正在使用DISTINCT
關鍵字進行一些實驗,某些特殊情況引起了我的注意。
首先,我注意到我可以在DISTINCT
加上一些括號,例如:
SELECT DISTINCT(NAME) FROM EMPLOYEE;
還可以
SELECT DISTINCT(NAME, SURNAME) FROM EMPLOYEE;
給我一個錯誤。 為什么?
允許像這樣的操作有什么意義?
SELECT DISTINCT(NAME), COUNT(SURNAME) FROM EMPLOYEE;
DISTINCT
(或DISTINCTROW
)不是函數; 它是SELECT
語句的一個選項,它告訴MySQL從查詢生成的結果集中剝離重復的行。 默認情況下,它返回所有生成的行,包括重復行。
它也可以與COUNT()
聚合函數(如COUNT(DISTINCT expr)
)一起使用,並且具有相同的含義:它忽略重復項。
因為DISTINCT
不是函數,所以DISTINCT(NAME)
被解釋為DISTINCT
后跟表達式(NAME)
(與NAME
相同)。
SELECT DISTINCT(NAME, SURNAME) FROM EMPLOYEE
中SELECT DISTINCT(NAME, SURNAME) FROM EMPLOYEE
無效,因為(NAME, SURNAME)
不是有效的MySQL表達式。
DISTINCT
根本不是什么-只是修飾符。 它在兩個地方使用。 它可以修改聚合函數。 唯一值得使用的是COUNT(DISTINCT)
。
就您而言,您將其用作SELECT
的修飾符。 它只是說,每個整行應該是不同的。
因此,當您說:
SELECT DISTINCT (name, surname)
這與從此查詢獲取(name, surname)
所有不同行相同:
SELECT (name, surname)
MySQL無法識別此語法。 在某些數據庫中,這表示一個元組或行構造函數。 但是,由於MySQL無法識別此語法,因此會出現錯誤。
注意: SELECT DISTINCT
可能非常強大,但通常沒有必要。 通常,您可以對實際上要“區分”的列進行GROUP BY
。 例如:
SELECT name, surname, COUNT(*)
FROM t
GROUP BY name, surname
ORDER BY COUNT(*) DESC;
該查詢實際上顯示了重復項以及重復發生的頻率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.