我(彻底)学习SQL,并且遇到了GROUP BY
条款。
GROUP BY
根据您提供的参数聚合或分组结果集。如果在查询中使用此子句,则可以对结果集执行聚合函数,以查找结果集的统计信息,如查找平均值(AVG())
或频率(COUNT())
。
我的问题是:如果没有附带的聚合函数,GROUP BY语句是否有用?
更新
使用GROUP BY
作为DISTINCT
的同义词(可能)是一个坏主意,因为我怀疑它较慢。
答案 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 BY
和ORDER 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个结果,但会记录该记录的最新更新值。