2010-12-18 129 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以提高性能。