You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle查询优化:无需子查询获取最大COL2值行的替代方案

无需子查询的Oracle改写方案

嘿,针对你要获取COL2值最大行的需求,这里有几个不用子查询的简洁方案,适配不同版本的Oracle:

方案1:使用FETCH FIRST(Oracle 12c及以上)

这是最直观的写法,排序后直接取目标行,还能完美处理多个COL2值相同且为最大值的情况:

SELECT COL1, COL2
FROM TABLE
ORDER BY COL2 DESC
FETCH FIRST 1 ROW WITH TIES;
  • 说明:ORDER BY COL2 DESC把COL2最大的行排到最前面,FETCH FIRST 1 ROW WITH TIES会返回所有COL2等于最大值的行(如果只有一行最大值,就返回那一行)。如果只需要任意一行最大值(不关心重复行),可以去掉WITH TIES写成FETCH FIRST 1 ROW ONLY。

方案2:使用Oracle特有的KEEP子句(适用于所有版本)

如果你的Oracle版本低于12c,用KEEP子句结合聚合函数也能实现,完全不需要子查询:

SELECT MAX(COL1) KEEP (DENSE_RANK LAST ORDER BY COL2) AS COL1,
       MAX(COL2) AS COL2
FROM TABLE;
  • 说明:DENSE_RANK LAST ORDER BY COL2会定位到COL2最大的分组,MAX(COL1)会返回该分组里的COL1(如果有多个相同最大COL2的行,这个写法会取COL1最大的那个;如果需要保留所有行的话,这个方案更适合单一行或者接受聚合结果的场景)。

内容的提问来源于stack exchange,提问作者Akhilesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:05:05