You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle中累计薪资计算需求:基于Emp表生成累计薪资结果

计算Emp表的累计薪资解决方案

嘿,我来帮你搞定这个累计薪资的计算问题!先明确下我们的基础数据和目标结果:

原始Emp表数据

empnoenamesalary
101Ram2000
102Kumar1000
103Mani3000

我们需要生成包含**累计薪资(Cumulative_Salary)**的结果,按empno顺序累加薪资。


方法一:使用窗口函数(推荐,适用于主流数据库)

现在大多数数据库(MySQL 8.0+、PostgreSQL、Oracle、SQL Server等)都支持窗口函数,这是最简洁高效的方式:

SELECT 
    empno AS Empno,
    ename AS Ename,
    SUM(salary) OVER(ORDER BY empno) AS Cumulative_Salary
FROM Emp
ORDER BY empno;

逻辑解释:

  • SUM(salary) OVER(ORDER BY empno) 是核心:它会按照empno的排序顺序,逐行累计计算薪资总和。
  • 第一行(empno=101):仅累加自身薪资,结果为2000
  • 第二行(empno=102):累加101+102的薪资,结果为3000
  • 第三行(empno=103):累加101+102+103的薪资,结果为6000

执行后就能得到你想要的结果:

EmpnoEnameCumulative_Salary
101Ram2000
102Kumar3000
103Mani6000

方法二:子查询方式(适用于不支持窗口函数的老版本数据库)

如果你的数据库是老版本(比如MySQL 5.x)不支持窗口函数,可以用子查询实现:

SELECT 
    e1.empno AS Empno,
    e1.ename AS Ename,
    (SELECT SUM(e2.salary) FROM Emp e2 WHERE e2.empno <= e1.empno) AS Cumulative_Salary
FROM Emp e1
ORDER BY e1.empno;

逻辑解释:

  • 对于每一行e1,子查询会找出所有empno小于等于当前行empno的记录,计算它们的薪资总和,从而得到累计值。

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

火山引擎 最新活动