【发布时间】:2018-05-11 19:31:52
【问题描述】:
问题
查看Oracle Base 中的SUM Analytic Function 并运行期望SUM 的SQL 将一次添加一行工资。
SELECT
deptno,
ename,
sal,
SUM(sal)
OVER (
PARTITION BY deptno
ORDER BY sal
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
AS RUNNING_TOTAL_IN_DEPT
FROM
emp
ORDER BY deptno, sal
;
但是,对于具有相同薪金值的行,将添加具有相同薪金值的行的小计。
DEPTNO ENAME SAL RUNNING_TOTAL_IN_DEPT
20 SMITH 800 800
20 ADAMS 1100 1900
20 JONES 2975 4875
20 SCOTT 3000 10875 <--- Why not 7875? How to make this to 7875?
20 FORD 3000 10875
30 JAMES 950 950
30 MARTIN 1250 3450 <--- Why not 2200?
30 WARD 1250 3450
30 TURNER 1500 4950
30 ALLEN 1600 6550
问题
请解释这种行为以及如何一次将总和相加,即使有多行具有相同的薪水值。
【问题讨论】:
-
改用
rows。