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

能否不使用子查询,通过Oracle分析函数获取最小值对应字段值?

不用子查询,仅用Oracle分析函数获取最小值对应字段值的解决方案

当然可以实现!你完全不需要依赖子查询,借助Oracle的FIRST_VALUE分析函数就能轻松达成需求。

核心思路

FIRST_VALUE函数会在指定的窗口范围内,返回排序后的第一个值。我们只需要按Col2升序排序,这样最小的Col2对应的Col1就会被优先选中,再通过DISTINCT去重,就能得到我们想要的单一结果。

实现查询语句

SELECT DISTINCT FIRST_VALUE(col1) OVER (ORDER BY col2 ASC) AS col1 FROM ds1;

完整测试验证

咱们用你提供的示例数据集来验证这个方法:

### 1014.010, Start time is: 10/30/2019 11:39:35am
MYUN@MYDB-C1>>create table ds1 (col1 varchar2 (1), col2 number)
2 /
Table created.
Elapsed: 00:00:00.01
MYUN@MYDB-C1>>insert into ds1 (col1, col2)
2 select 'A', 1 from dual
3 union all select 'B', 2 from dual
4 union all select 'C', 3 from dual
5 union all select 'D', 4 from dual
6 union all select 'E', 4 from dual
7 union all select 'A', 10 from dual
8 /
6 rows created.
Elapsed: 00:00:00.02
MYUN@MYDB-C1>>commit
2 /
Commit complete.
Elapsed: 00:00:00.01
MYUN@MYDB-C1>>col col1 format a10
MYUN@MYDB-C1>>SELECT DISTINCT FIRST_VALUE(col1) OVER (ORDER BY col2 ASC) AS col1 FROM ds1;
COL1
----------
A
1 row selected.
Elapsed: 00:00:00.01
MYUN@MYDB-C1>>drop table ds1
2 /
Table dropped.
Elapsed: 00:00:00.03
The time now: 10/30/2019 11:39:36am

补充说明

  • 为什么加DISTINCT?因为FIRST_VALUE会为每一行返回相同的结果(最小值对应的Col1),去重后就能得到单一的目标值。
  • 如果遇到多个相同最小值对应不同Col1的场景,可以调整窗口逻辑或改用LISTAGG等函数聚合结果,你的示例场景里最小值唯一,这个方法完全适用。

内容的提问来源于stack exchange,提问作者M. Kemp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:23