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

Oracle获取各ename最小Amount及按金额统一排名的技术问题

Oracle TEST_TABLE 需求实现方案

需求1:获取每个ename的最小Amount并按Amount排序

直接通过分组聚合实现,代码如下:

SELECT ename, MIN(Amount) AS min_amount
FROM TEST_TABLE
GROUP BY ename
ORDER BY min_amount;

逻辑说明:用GROUP BY ename将相同姓名的行归为一组,MIN(Amount)提取每组的最小金额,最后通过ORDER BY按最小金额排序输出。

需求2:新增RANK_ID列,按Amount排序且同一ename所有行同排名

不能直接对原表的Amount字段使用DENSE_RANK(),因为同一ename可能存在不同金额,需要基于每个ename的最小金额来计算排名。以下两种方法都可以实现:

方法1:使用CTE(公共表表达式)

WITH ename_min AS (
    SELECT ename, MIN(Amount) AS min_amount
    FROM TEST_TABLE
    GROUP BY ename
)
SELECT 
    t.ename,
    t.Amount,
    DENSE_RANK() OVER (ORDER BY em.min_amount) AS RANK_ID
FROM TEST_TABLE t
JOIN ename_min em ON t.ename = em.ename
ORDER BY RANK_ID, t.ename;

方法2:使用子查询关联

SELECT 
    t.ename,
    t.Amount,
    DENSE_RANK() OVER (ORDER BY em.min_amount) AS RANK_ID
FROM TEST_TABLE t
JOIN (
    SELECT ename, MIN(Amount) AS min_amount
    FROM TEST_TABLE
    GROUP BY ename
) em ON t.ename = em.ename
ORDER BY RANK_ID, t.ename;

逻辑说明:先通过子查询/CTE计算出每个ename对应的最小金额,再关联回原表。DENSE_RANK()函数基于每个ename的最小金额进行排序,这样同一ename的所有行都会拥有相同的排名,且排名是连续的(如果需要排名有间隔,可以替换为RANK())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:01