数据库累计值查询

一、oracle

需要使用SUM() OVER()

select empno,deptno,sal,sum(sal)  over(partition by deptno) sumvalue
from emp order by deptno,empno;


结果为:

7782	10	1200	7500
7839	10	5000	7500
7934	10	1300	7500
7369	20	1100	11175
7566	20	2975	11175
7788	20	3000	11175
7876	20	1100	11175
7902	20	3000	11175
7499	30	1600	9400
7521	30	1250	9400
7654	30	1250	9400
7698	30	2850	9400
7844	30	1500	9400
7900	30	950	9400


从结果来看,数据是按deptno进行了求和,当然这样的数据也可以通过子查询group by来实现,但是最后一列数据并没为没有对倒数第二列进行累计求和

select empno,deptno,sal,sum(sal)  over(partition by deptno order by empno) sumvalue
from emp order by deptno,empno;


结果为:

7782	10	1200	1200
7839	10	5000	6200
7934	10	1300	7500
7369	20	1100	1100
7566	20	2975	4075
7788	20	3000	7075
7876	20	1100	8175
7902	20	3000	11175
7499	30	1600	1600
7521	30	1250	2850
7654	30	1250	4100
7698	30	2850	6950
7844	30	1500	8450
7900	30	950	9400

这样的结果就是按照deptno进行分组累计求和了

二、sql server

select empno,deptno,sal,sum(sal) over(partition by deptno) sumValue
from emp order by deptno,empno;


这个方式与oracle的结果是一样的,这里不在展示

select empno,deptno,sal,sum(sal) over(partition by deptno order by empno) sumValue
from emp order by deptno,empno;


这样加上了order by在sql server里面就报错了,很纠结,累计求和就只能通过子查询来实现了

select empno,deptno,sal,
(select SUM(SAL) FROM emp innerEmp WHERE innerEmp.deptno=emp.deptno AND innerEmp.empno<=emp.empno) sumValue
from emp
order by emp.deptno,emp.empno;


结果为:

7782	10	2450.00	2450.00
7839	10	5000.00	7450.00
7934	10	1300.00	8750.00
7369	20	800.00	800.00
7566	20	2975.00	3775.00
7788	20	3000.00	6775.00
7876	20	1100.00	7875.00
7902	20	3000.00	10875.00
7499	30	1600.00	1600.00
7521	30	1250.00	2850.00
7654	30	1250.00	4100.00
7698	30	2850.00	6950.00
7844	30	1500.00	8450.00
7900	30	950.00	9400.00


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

也许还有更好的方法,欢迎大家提出宝贵意见

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值