MySQL查询中GROUP BY和DISTINCT之间有什么区别?
答案 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
,您可以使用COUNT
和MAX
等汇总功能。 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)