查询对先前值求和

Sha*_*nna 4 sql oracle sum cumulative-sum

我的表格结构如图所示实际数据和预期结果

我需要将值添加到先前值的总和中(在所需结果中显示)我尝试使用以下查询

SELECT empid,
sum(tot_hours) OVER (PARTITION BY empid ORDER BY empid ) AS tot_hours
        FROM empDet
       ORDER BY empid
Run Code Online (Sandbox Code Playgroud)

但我得到以下结果集

给定查询的结果

但我需要第一张图片中的结果。

谁能帮我做这个吗?

Lal*_*r B 5

sum(tot_hours) OVER (PARTITION BY empid ORDER BY empid ) AS tot_hours

你的ORDER BY不正确。如果您想要在 上运行 SUMTOT_HOURS,那么您应该按 tot_hours 排序。

例如,以下查询将计算每个部门员工的工资运行总和:

SQL> SELECT deptno,
  2    sal,
  3    SUM(sal) OVER (PARTITION BY deptno ORDER BY sal ) AS tot_sal
  4  FROM emp
  5  ORDER BY deptno;

    DEPTNO        SAL    TOT_SAL
---------- ---------- ----------
        10       1300       1300
        10       2450       3750
        10       5000       8750
        20        800        800
        20       1100       1900
        20       2975       4875
        20       3000      10875
        20       3000      10875
        30        950        950
        30       1250       3450
        30       1250       3450
        30       1500       4950
        30       1600       6550
        30       2850       9400

14 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)

更新对于重复值,运行总计将是重复的。要使其唯一,请使用UNBOUNDED PRECEDING子句。例如,

SQL> SELECT empno, deptno,
  2    sal,
  3    SUM(sal) OVER (PARTITION BY deptno ORDER BY sal ROWS UNBOUNDED PRECEDING) AS tot_sal
  4  FROM emp
  5  ORDER BY deptno;

     EMPNO     DEPTNO        SAL    TOT_SAL
---------- ---------- ---------- ----------
      7934         10       1300       1300
                   10       1300       2600
      7782         10       2450       5050
      7839         10       5000      10050
      7369         20        800        800
      7876         20       1100       1900
      7566         20       2975       4875
      7788         20       3000       7875
      7902         20       3000      10875
      7900         30        950        950
      7521         30       1250       2200
      7654         30       1250       3450
      7844         30       1500       4950
      7499         30       1600       6550
      7698         30       2850       9400

15 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)

  • @Shanna 抱歉,我被一些事情困住了。是的,重复值需要 **UNBOUNDED PRECEDING**。 (2认同)