GROUP BY HAVING 和 SELECT MAX() GROUP BY 的区别

Difference between GROUP BY HAVING and SELECT MAX() GROUP BY

我是 SQL 的新手,对以下两个查询的差异感到困惑:

SELECT MAX(version), * FROM table WHERE primary_key = @key GROUP BY location

SELECT version, * FROM table WHERE primary_key = @key GROUP BY location HAVING version = MAX(version)

假设 table 看起来像这样:

primary_key | version | location | data

如果我理解正确,这两个查询 select 每个位置中的最大版本条目(在那些以 @key 作为主键的位置中)。那么这两个查询之间有什么区别吗?或者只是性能上的差异?

您错过了 table 姓名
在使用聚合函数时使用 * star(所有列)已被弃用,并且在大多数数据库中是不允许的

SELECT MAX(version) 
FROM your_table  
WHERE primary_key = @key 
GROUP BY location

SELECT version
FROM your_table
WHERE primary_key = @key 
GROUP BY location 
HAVING version = MAX(version)

这两个查询不同,因为在第二个查询中,生成的查询被过滤以匹配 having 条件

曾经处理过查询结果(而不是直接处理查询的行源) 是的,第二个比第一个慢......在大多数情况下,差异可能不明显

请参考下面link,可能会有用: http://www.dofactory.com/sql/group-by