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

编写PL/SQL查询获取近10年empsal表中收入最高的3名人员

解决方案

以下是适配Oracle数据库的查询实现,两种方案分别适配不同的排名需求:

方案1:基础实现(严格返回3条,不处理并列排名)

直接按收入总额倒序取前3,适合不需要考虑同分并列的场景:

SELECT pername, total_salary
FROM (
    SELECT pername, SUM(salary) AS total_salary
    FROM empSal
    -- 筛选近10年的薪资记录,TRUNC去掉当前时间的时分秒避免边界误差
    WHERE salDate >= ADD_MONTHS(TRUNC(SYSDATE), -12 * 10)
    GROUP BY pername
    ORDER BY total_salary DESC
)
WHERE ROWNUM <= 3;

方案2:兼容并列排名(同分同排名,返回所有符合前3顺位的人员)

如果存在多人收入总额相同的情况,用RANK()窗口函数处理更合理,不会漏掉并列人员:

SELECT pername, total_salary
FROM (
    SELECT 
        pername, 
        SUM(salary) AS total_salary,
        RANK() OVER(ORDER BY SUM(salary) DESC) AS sal_rank
    FROM empSal
    WHERE salDate >= ADD_MONTHS(TRUNC(SYSDATE), -12 * 10)
    GROUP BY pername
)
WHERE sal_rank <= 3;

PL/SQL 匿名块直接输出结果示例

如果需要在PL/SQL环境下直接打印结果,可以用以下写法(Oracle 12c+支持):

DECLARE
BEGIN
    FOR rec IN (
        SELECT pername, SUM(salary) AS total_salary
        FROM empSal
        WHERE salDate >= ADD_MONTHS(TRUNC(SYSDATE), -12 * 10)
        GROUP BY pername
        ORDER BY total_salary DESC
        FETCH FIRST 3 ROWS ONLY
    ) LOOP
        DBMS_OUTPUT.PUT_LINE('员工姓名:' || rec.pername || ',近10年总收入:' || rec.total_salary);
    END LOOP;
END;
/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:05