簡體   English   中英

DISTINCT作為子句或函數

[英]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 EMPLOYEESELECT 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM