ORACLE计算累计和

先来看一下表中的原始数据

SQL> select ename,sal from emp;

ENAME             SAL
---------- ----------
SMITH             800
ALLEN            1600
WARD             1250
JONES            2975
MARTIN           1250
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
TURNER           1500
ADAMS            1100

ENAME             SAL
---------- ----------
JAMES             950
FORD             3000
MILLER           1300

14 rows selected.

OK,现在我们通过SUM()OVER()来实现累计的功能

SQL> select ename,sal,
  2  sum(sal) over(order by sal) as total
  3  from emp;

ENAME             SAL      TOTAL
---------- ---------- ----------
SMITH             800        800
JAMES             950       1750
ADAMS            1100       2850
WARD             1250       5350
MARTIN           1250       5350
MILLER           1300       6650
TURNER           1500       8150
ALLEN            1600       9750
CLARK            2450      12200
BLAKE            2850      15050
JONES            2975      18025

ENAME             SAL      TOTAL
---------- ---------- ----------
SCOTT            3000      24025
FORD             3000      24025
KING             5000      29025

仔细看一下红色标注出来的部分,好像有问题哦,因为两者的sal是一样的。下面我们在over()中加一个字段再看看结果。

SQL> select ename,sal,
  2  sum(sal) over(order by sal,empno) as total
  3  from emp;

ENAME             SAL      TOTAL
---------- ---------- ----------
SMITH             800        800
JAMES             950       1750
ADAMS            1100       2850
WARD             1250       4100
MARTIN           1250       5350
MILLER           1300       6650
TURNER           1500       8150
ALLEN            1600       9750
CLARK            2450      12200
BLAKE            2850      15050
JONES            2975      18025

ENAME             SAL      TOTAL
---------- ---------- ----------
SCOTT            3000      21025
FORD             3000      24025
KING             5000      29025

14 rows selected.

这下就好了,得到我们想要的正确结果了。因为光凭sal一个字段是无法唯一的标识一条记录的,加上empno字段就可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值