[英]Oracle analytics SUM SQL does not sum one at a time in window
查看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
請解釋此行為以及如何一次添加一行,即使有多個具有相同工資值的行也是如此。
你使用RANGE BETWEEN
而不是ROWS BETWEEN
。 RANGE BETWEEN
將具有相同鍵值的所有行視為相同,因此它們都獲得“完整”值。
Oracle文檔沒有很好地解釋這一點。 這是一篇博客文章,提供了一些背景知識。
你想要ROWS BETWEEN
而不是RANGE BETWEEN
:
SELECT deptno, ename, sal,
SUM(sal) OVER (PARTITION BY deptno ORDER BY sal
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS RUNNING_TOTAL_IN_DEPT
FROM emp
ORDER BY deptno, sal;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.