首页 > 数据库 > mysql教程 > 如何使用 Oracle SQL 获取分组数据中每个 KEY 的最大 VAL?

如何使用 Oracle SQL 获取分组数据中每个 KEY 的最大 VAL?

Susan Sarandon
发布: 2025-01-17 19:11:08
原创
351 人浏览过

How to Fetch the Maximal VAL for Each KEY in Grouped Data Using Oracle SQL?

提取 Oracle SQL 中每个 KEY 的最高 VAL

本指南演示如何使用 Oracle SQL 高效检索分组数据中每个 VAL 的最大 KEY。 让我们看一个常见的场景:

名为TABLE_NAME的表包含以下数据:

KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM

目标是生成一个结果集,仅显示每个唯一 VAL 的最大 KEY

KEY VAL
A AB
B EF
C HI
D LM

高效的 Oracle SQL 解决方案(10g 及更高版本):

虽然子查询可以实现这一点,但更优雅且通常更快的解决方案使用 ROW_NUMBER() 分析函数:

<code class="language-sql">SELECT key, val
FROM (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY key ORDER BY num DESC) AS seqnum
    FROM table_name t
) t
WHERE seqnum = 1;</code>
登录后复制

此查询首先为每个 seqnum 分区中的每一行分配一个排名 (KEY),按 NUM 按降序排列。 然后,它过滤结果以仅包含具有 seqnum = 1 的行,从而有效地选择具有最高 NUM 的行(因此,隐式地,假设每个内 VALNUM 之间存在一致的关系,则最高的 VAL键)。

重要提示: 此方法保证每个 KEY 一行。 如果您需要以不同方式处理 NUM 中的潜在关系(例如,如果多行共享最大值 KEY,则返回 NUM 的多行),请考虑使用 RANK()DENSE_RANK() 而不是 ROW_NUMBER()

以上是如何使用 Oracle SQL 获取分组数据中每个 KEY 的最大 VAL?的详细内容。更多信息请关注PHP中文网其他相关文章!

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