首页 > 数据库 > mysql教程 > 如何在SQL中高效检索按ID分组的列的最大值?

如何在SQL中高效检索按ID分组的列的最大值?

Barbara Streisand
发布: 2025-01-21 08:09:39
原创
1049 人浏览过

How to Efficiently Retrieve the Highest Value of a Column Grouped by ID in SQL?

SQL 查询查找按 ID 分组的最大列值

本文解决了从列中高效检索最高值的问题,该列按数据库表中的唯一 ID 进行分组。 我们用“SCORES”表来说明:

<code>ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>
登录后复制

我们的目标是获取包含每个“ID”的最大“ROUND”值的行及其相应的“SCORE”。所需的输出是:

<code>ID   ROUND   SCORE
1    3       2
2    2       12
3    1       6</code>
登录后复制

虽然子查询方法是可能的,但对于大型数据集来说它可能效率低下。 更好的方法是利用窗口函数:

SELECT DISTINCT
       id
      ,max(round) OVER (PARTITION BY id) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;
登录后复制

此查询利用 max(round) OVER (PARTITION BY id) 来确定每个“ID”的最大“ROUND”。 first_value(score) OVER (PARTITION BY id ORDER BY round DESC) 然后检索与最大“ROUND”相关的“SCORE”。 DISTINCT 确保每个“ID”仅返回一行。

这种窗口函数方法避免了多次表扫描,为大型数据库提供了显着更有效的解决方案。

以上是如何在SQL中高效检索按ID分组的列的最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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