MySQL - GROUP BY和DISTINCT有什么区别?

时间:2010-12-18 09:49:23

标签: mysql

  

可能重复:
  Is there any difference between Group By and Distinct

MySQL查询中GROUP BY和DISTINCT之间有什么区别?

3 个答案:

答案 0 :(得分:13)

重复

Is there any difference between GROUP BY and DISTINCT

这里已经讨论了

如果还想在这里听

好的group by和distinct有自己的用途。

Distinct用于从满足查询条件的记录中过滤唯一记录。

Group by子句用于对触发聚合函数的数据进行分组,并根据group by子句中的列返回输出。它有自己的限制,例如,除了聚合函数之外,select查询中的所有列都必须是Group by子句的一部分。

因此,尽管您可以使用distinct和group by子句返回相同的数据,但最好使用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

当您在选择列表中有更多列时,它会让您的生活更轻松。但与此同时,如果您需要显示sum(col10)以及上面的列,则必须使用Group By。在那种情况下,distinct不起作用。

例如

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

希望这有帮助。

答案 1 :(得分:7)

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以提高效果。

答案 2 :(得分:0)