首页 >数据库 >mysql教程 >如何使用MySQL的MAX()和GROUP BY正确检索非聚合列?

如何使用MySQL的MAX()和GROUP BY正确检索非聚合列?

Linda Hamilton
Linda Hamilton原创
2024-12-30 21:27:09915浏览

How Can I Correctly Retrieve Non-Aggregated Columns with MySQL's MAX() and GROUP BY?

MySQL 中使用 MAX() 进行分组和聚合

在 MySQL 中,MAX() 函数可以与 GROUP BY 结合使用子句来聚合数据并选择每个组中指定列的最大值。但是,如果目标列在组中不唯一,则选择相应的非聚合列可能会产生意外结果。

为了说明此问题,让我们检查以下 SQL 查询:

SELECT MAX(timestamp), rid, pid
FROM theTable
GROUP BY rid;

此查询的结果可能与期望的结果不一致,因为所选的 pid 列可能与最大值的时间戳不匹配。

要获取正确的结果结果,我们需要修改查询以识别每个组中具有最大时间戳的行,然后将这些行与原始表连接以获得相应的 pid。

以下修改后的 SQL 查询可以完成此操作:

SELECT test.pid, test.cost, test.timestamp, test.rid
FROM theTable AS test
INNER JOIN
    (SELECT rid, MAX(timestamp) AS ts
    FROM theTable
    GROUP BY rid) AS maxt
ON (test.rid = maxt.rid AND test.timestamp = maxt.ts);

此查询首先使用子查询识别每个 Rid 的最大时间戳,然后将其与原始表连接。连接条件确保所选行是每个 Rid 组内具有最大时间戳的行。

因此,获得所需的输出:

pid cost timestamp rid
5 345 2011-04-14 01:06:06 1
3 4455 2011-04-14 01:05:41 2
7 5435 2011-04-14 01:14:14 3

以上是如何使用MySQL的MAX()和GROUP BY正确检索非聚合列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn