MySQL中如何选择每组中值最高的行?

Linda Hamilton
发布: 2024-11-24 08:02:11
原创
593 人浏览过

How to Select the Row with the Highest Value in Each Group in MySQL?

MySQL:控制在 Group BY 查询中返回哪一行

在 MySQL 中,从每个组中检索具有最高值的行是一项共同的任务。但是,将标准 GROUP BY 子句与 ORDER BY 一起使用有时会导致意外结果。

为了实现此目的,我们可以采用替代方法来覆盖默认分组行为:

子查询方法:

该方法涉及创建一个子查询来获取每个唯一的最大version_id id:

SELECT *
FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1
INNER JOIN table t2 ON (t2.id = t1.id AND t1.version_id = t2.version_id)
登录后复制

此查询将原始表与子查询连接起来,该子查询为每个 id 选择最大 version_id。连接确保仅返回具有最高 version_id 的行。

使用 ORDER BY 技巧的子查询:

子查询方法的一种变体涉及在子查询以确保特定的排序:

SELECT *
FROM (SELECT * FROM table ORDER BY version_id DESC) t1
GROUP BY t1.id
登录后复制

此查询有效地按降序对行进行排序在执行分组之前,确保每个组中保留 version_id 最高的行。

命名 Windows 函数:

窗口函数允许计算在窗口定义的一组行中执行,可用于此任务:

SELECT *
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY version_id DESC) AS rn
  FROM table
) t
WHERE rn = 1
登录后复制

此查询计算行ROW_NUMBER 定义的分区内每个唯一 ID 的编号。 WHERE 子句过滤掉行号不为 1 的行,确保仅返回每个 id 具有最高 version_id 的行。

以上是MySQL中如何选择每组中值最高的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板