Аналитика Oracle SUM SQL не суммирует по одному в окне - PullRequest
0 голосов
/ 11 мая 2018

Проблема

Просмотр Аналитическая функция SUM in Oracle Base и запуск SQL, ожидая, что SUM добавит зарплату по одной строке за раз.

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

Вопрос

Пожалуйста, объясните этоповедение и как добавить сумму по одной строке за раз, даже если есть несколько строк с одинаковым значением зарплаты.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вы хотите 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;
0 голосов
/ 11 мая 2018

Вы используете RANGE BETWEEN вместо ROWS BETWEEN.RANGE BETWEEN обрабатывает все строки с одинаковыми значениями ключа и одинаковыми, поэтому все они получают "полное" значение.

Документация Oracle не очень хорошо объясняет это. Здесь - это запись в блоге, в которой содержится некоторая информация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...