2010-12-18 127 views

回答

10

Is there any difference between GROUP BY and DISTINCT

複製它已經在這裏

討論如果仍想在這裏

井組通過聽取和獨特都有自己的用途。

Distinct用於過濾滿足查詢條件的記錄中的唯一記錄。

Group by子句用於對啓動集合函數的數據進行分組,並根據group by子句中的列返回輸出。它有其自身的侷限性,除了聚合函數外,select查詢中的所有列都必須是Group by子句的一部分。

因此,即使您可以使用distinct和group by clause返回的相同數據,也可以使用distinct。見下面的例子

select col1,col2,col3,col4,col5,col6,col7,col8,col9 from table group by col1,col2,col3,col4,col5,col6,col7,col8,col9 

可以寫成

select distinct col1,col2,col3,col4,col5,col6,col7,col8,col9 from table 

它會讓你的生活更輕鬆,當你在選擇列表中的多個列。但同時,如果您需要顯示總和(col10)以及上面的列,則必須使用分組依據。在這種情況下,明顯不會起作用。

select col1,col2,col3,col4,col5,col6,col7,col8,col9,sum(col10) from table group by col1,col2,col3,col4,col5,col6,col7,col8,col9 

希望這有助於。

+0

感謝您的回覆 – sreenavc 2010-12-18 10:06:08

4

DISTINCT僅適用於整行。不要誤入思維SELECT DISTINCT(A), B做一些不同的事情。這相當於SELECT DISTINCT A, B

另一方面,GROUP BY創建一個包含在單個列(或多列或任意表達式)中共享每個不同值的所有行的組。使用GROUP BY,您可以使用聚合函數,如COUNTMAX。這不適用於DISTINCT

  • 如果要確保結果集中的所有行都是唯一的,並且不需要聚合,請使用DISTINCT
  • 對於任何更高級的應用,您應該使用GROUP BY

只到MySQL應用於另一個不同之處是,除非另行指定GROUP BY也意味着一個ORDER BY。下面是如果你使用DISTINCT會發生什麼:

SELECT DISTINCT a FROM table1 

結果:

 
2 
1 

但使用GROUP BY結果會在排序順序:

SELECT a FROM table1 GROUP BY a 

結果:

 
1 
2 

由於沒有使用DISTINCT進行排序的結果在可以使用的情況下更快。注意:如果您不需要使用GROUP BY進行排序,則可以添加ORDER BY NULL以提高性能。