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
我是 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