sql - Oracle 分析 SUM SQL 不会在窗口中一次求和一个

标签 sql oracle analytics

问题

查看SUM Analytic FunctionOracle Base并运行期望 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 BETWEENRANGE BETWEEN 将具有相同键值的所有行视为相同,因此它们都获得“完整”值。

Oracle 文档对此没有很好的解释。 Here是一篇提供一些背景知识的博文。

关于sql - Oracle 分析 SUM SQL 不会在窗口中一次求和一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291337/

相关文章:

sql - Oracle UNION 和 ORDER BY 的奇怪问题

mysql - 跨 MySQL 和 MongoDB/HBase 的 JOIN 以获取分析数据

google-analytics - Google Analytics(分析)增强型电子商务有效载荷在结帐时过大

api - Chatbase集成仪表板

MySQL:列大小限制

mysql - 需要一种优化慢速 SQL 查询的方法吗?

java - 使用 SwingWorker 和 HttpClient-4.1.1 在 Sun java 和 Oracle 之间上传奇怪的文件行为

Oracle 开发环境许可证?

mysql - 如何在 MySQL 中返回数据透视表输出?

sql - 如何编写SQL来在Oracle中显示我的案例中的数据?