GROUP BY子句没有聚合函数的任何原因?

时间:2010-02-04 06:12:02

标签: sql mysql group-by aggregate

我(彻底)学习SQL,并且遇到了GROUP BY条款。

GROUP BY根据您提供的参数聚合或分组结果集。如果在查询中使用此子句,则可以对结果集执行聚合函数,以查找结果集的统计信息,如查找平均值(AVG())或频率(COUNT())

我的问题是:如果没有附带的聚合函数,GROUP BY语句是否有用?

更新 使用GROUP BY作为DISTINCT的同义词(可能)是一个坏主意,因为我怀疑它较慢。

5 个答案:

答案 0 :(得分:13)

  

是GROUP BY语句在没有附带聚合函数的情况下有用吗?

在这种情况下使用DISTINCT将是同义词,但您希望/必须定义GROUP BY子句的原因是为了能够定义HAVING条款细节。

如果您需要定义HAVING条款,则 来定义GROUP BY - 您无法与此结合使用DISTINCT

答案 1 :(得分:6)

您可以使用 GROUP BY 执行 DISTINCT 选择,而不使用任何 AGGREGATES

答案 2 :(得分:6)

分组可以用于双向主要是 1)在连接中与SQL聚合函数
2)从结果集中消除重复的行

回答你的问题在于上述USE的第二部分。

答案 3 :(得分:1)

注意:以下所有内容仅适用于MySQL

GROUP BY guaranteed按顺序返回结果,DISTINCT不是。

GROUP BYORDER BY NULL的效率与DISTINCT相同(并以相应的方式实施)。如果正在聚合(或分散)字段上有索引,则两个子句都在此字段上使用松散索引扫描。

GROUP BY中,您可以返回非分组和非聚合的表达式。 MySQL将从相应的组中选择任何随机值来计算表达式。

使用GROUP BY,您可以省略GROUP BY子句中的SELECT个表达式。使用DISTINCT,您不能。 <{1}}返回的每一行都保证是唯一的。

答案 4 :(得分:-2)

它仅用于聚合函数。

例如,请考虑以下代码:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name

每个产品只会返回1个结果,但会记录该记录的最新更新值。