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

标签 mysql sql group-by having

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

假设表格看起来像这样:

primary_key | version | location | data

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

最佳答案

你错过了表名
在使用聚合函数时使用 * 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 是不同的,因为在第二个中,结果查询是匹配 having 条件的过滤器

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

关于mysql - GROUP BY HAVING 和 SELECT MAX() GROUP BY 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783207/

相关文章:

java - Android Room - 处理对象中的对象列表和查询结果

mysql - Hadoop Hive 查询从单独的表中选择和分组

mysql - 键 'n' 的重复条目 'primary',重复时更改 ID

sql - 从 Postgres 中选择截断的字符串

mysql - 类似类对象推荐的 MySQL 数据模型

MySQL - Group By, Max, Inner Join - 问题

php - 过滤有效日期-mysql

mysql - MAX 和 GROUP BY 不返回好的值

MySQL - 计算行数和左连接问题

arrays - 基于前 n 行在 groupby() 中创建新列的更短方法