mysql - 使用 MySQL 聚合函数 MIN 时获取正确的行数据?

标签 mysql sql aggregate-functions min

<分区>

现在,据我了解,当您使用诸如 AVGSUM 等聚合函数时,您必须记住,您 SELECT 中未涉及聚合函数的任何其他字段都是不确定的,例如:

SELECT AVG(amount), name, desc FROM some_table;

我理解这一点,这是因为来自聚合函数的值未绑定(bind)到任何一行,因此所选的其他字段是不确定的。

但是,如果您使用不同类型的聚合函数,例如 MINMAX,它们检索的内容 与特定行相关联,那么可以安全地假设选择的任何其他字段不是可以确定聚合函数中的 t? ... 结果与特定的数据行相关联,这与其他聚合函数的结果不同吗?

例如:

SELECT MIN(media_id),
       auction_id,
       media_url
FROM   auction_media
WHERE  auction_id IN( 119925, 124660, 124663, 129078,
                      129094, 134395, 149753, 152221,
                      154733, 154737, 154742, 157694,
                      161411, 165965, 165973 )
       AND media_type = 1
       AND upload_in_progress = 0
GROUP  BY auction_id;

如果我的想法是正确的,这将总是返回正确的 media_url,对吗?

最佳答案

However, if you use a different type of aggregate function such as MIN or MAX where what they retrieve is tied to a certain row then is it safe to assume that any other fields selected that aren't within an aggregate function can be determined?

没有。首先,多行可以有最小值或最大值;另一方面,没有什么可以阻止查询同时选择 MIN(a)、MAX(a)、AVG(a) 和 SUM(a)(我非常怀疑 MySQL 会过度复杂化它的查询引擎以利用的“如果查询只有一个聚合...”)


注意:我相当确定 MySQL 最初甚至允许此类查询的唯一原因是在以下情况下的简写:

SELECT a.*, SUM(b.X)
FROM a INNER JOIN b ON a.PK = b.a_PK
GROUP BY a.PK;

查询作者知道非聚合字段的位置可以通过分组而不是聚合值来确定。

关于mysql - 使用 MySQL 聚合函数 MIN 时获取正确的行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49740984/

相关文章:

sql - 当时间戳开始时间大于时间戳结束时间时查询失败

mysql - 组数

mysql - 从一列中找到最大值并选择它们的行

mysql - 我可以设置一个从多个其他 RDS 主实例进行复制的 RDS 实例吗?

mysql - SQL中的很多条件

java - Kotlin 中的 JOOQ SUM 与自定义类型

mysql - 如何捕获 Rails 中超出范围的特定列?

php - 使用 PHP 将 MySQL 查询的结果显示到表中

mysql - 查询以检查日期是否在两个月-日值之间

php - mysql - 来自桥接表的多对多查询