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

sre*_*avc 6 mysql

可能重复:
Group By和Distinct之间是否有任何区别

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

Sha*_*ngh 13

重复

GROUP BY和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
Run Code Online (Sandbox Code Playgroud)

可写成

select distinct col1,col2,col3,col4,col5,col6,col7,col8,col9 from table
Run Code Online (Sandbox Code Playgroud)

当您在选择列表中有更多列时,它会让您的生活更轻松.但与此同时,如果您需要显示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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

结果:

2
1

但使用GROUP BY结果将按排序顺序排列:

SELECT a FROM table1 GROUP BY a
Run Code Online (Sandbox Code Playgroud)

结果:

1
2

由于缺少分类使用DISTINCT,在您可以使用任何一种情况下更快.注意:如果您不需要进行排序,GROUP BY可以添加ORDER BY NULL以提高性能.