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

时间:2017-06-27 14:42:00

标签: mysql sql group-by having

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

  

SELECT MAX(版本),* FROM表WHERE primary_key = @key GROUP BY位置

     

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

假设表格看起来像这样:

primary_key | version | location | data

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

2 个答案:

答案 0 :(得分:1)

你错过了表名
使用聚合函数时使用* 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)

两个qyery是不同的,因为在第二个结果查询是过滤器匹配有条件

在查询结果上工作(而不是直接在查询的行源上工作) 是的,第二个更慢,第一个...大多数情况下,差异可能是不明显的

答案 1 :(得分:0)

请参考以下链接,可能有用: http://www.dofactory.com/sql/group-by