首页 > 数据库 > mysql教程 > 如何高效查找大表中每组某列的最大值?

如何高效查找大表中每组某列的最大值?

Patricia Arquette
发布: 2025-01-21 08:12:10
原创
459 人浏览过

How Can I Efficiently Find the Maximum Value in a Column for Each Group in a Large Table?

大型表格分组列中最大值的查找

本例中,您需要从大型表格的每个分组中提取特定列的最大值所在的行,而无需进行低效的多表搜索。考虑以下表格:

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

您的目标是检索每个唯一ID的最新回合以及相应的得分。所需输出如下:

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

使用窗口函数的高效解决方案

一种高效的方法是结合使用窗口函数和DISTINCT关键字:

<code class="language-sql">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;</code>
登录后复制

此查询使用了以下关键概念:

  • PARTITION BY: 按id列对行进行分组。
  • MAX(round): 计算每个分区中的最大回合数。
  • FIRST_VALUE(score): 检索每个具有最大回合数的id的第一个(最新)分数。
  • DISTINCT: 确保只返回唯一行,消除重复结果。

此优化的查询有效地返回每个唯一ID的最新回合和分数,无需多次扫描表格,即使对于大型表格也能保持高效。

以上是如何高效查找大表中每组某列的最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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