首页 >数据库 >mysql教程 >如何在 MySQL 中选择 Group-Wise 最大值?

如何在 MySQL 中选择 Group-Wise 最大值?

Susan Sarandon
Susan Sarandon原创
2024-11-22 09:56:111055浏览

How to Select the Group-Wise Maximum in MySQL?

在 MySQL 中选择分组最大值

在关系数据库中,有时您需要检索每个组的特定列的最大值的行。这称为选择分组最大值。在 MySQL 中,有多种方法可以实现此目的。

子查询方法

一种有效的方法是使用子查询:

SELECT *
FROM (
  SELECT id, MAX(version_id) AS version_id
  FROM table
  GROUP BY id
) AS t1
INNER JOIN table AS t2
  ON t2.id = t1.id AND t1.version_id = t2.version_id;

此子查询创建一个表每个 ID 的最大版本 ID,然后将其与原始表连接以检索相应的行。它相对高效,并且假设 (id, version_id) 列上存在索引。

聚合和排名方法

或者,您可以使用聚合和排名函数:

SELECT id,
       version_id,
       field1,
       field2
FROM (
  SELECT id,
          version_id,
          field1,
          field2,
          RANK() OVER (PARTITION BY id ORDER BY version_id DESC) AS ranking
  FROM table
) AS ranked_table
WHERE ranking = 1;

此查询按照 version_id 的降序对每个 ID 的行进行排名,并选择排名为 1 的行,从而有效地过滤最大值

窗口函数

窗口函数也可用于此目的:

SELECT id,
       version_id,
       field1,
       field2
FROM (
  SELECT id,
          version_id,
          field1,
          field2,
          MAX(version_id) OVER (PARTITION BY id) AS max_version_id
  FROM table
) AS windowed_table
WHERE version_id = max_version_id;

此查询使用 MAX() 计算每个 ID 的最大版本 ID over() 窗口函数并选择具有匹配版本 ID 的行。

以上是如何在 MySQL 中选择 Group-Wise 最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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