oracle - oracle中如何进行累计求和

标签 oracle cumulative-sum

我是 SQL 新手,我想制作一份报告,显示每个类次的每日工单数量以及最新总数。

这是我的查询,显示下面的前 5 列:

    SELECT 
    TO_CHAR(DTTM,'YYYY-MM-DD') as "DATE"
    ,COUNT(CASE WHEN TO_CHAR(DTTM, 'HH24:MI') BETWEEN '14:00' AND '22:00' THEN TKTNUM ELSE NULL END) AS "DAYS"
    ,COUNT(CASE WHEN TO_CHAR(DTTM, 'HH24:MI') BETWEEN '06:00' AND '14:00' THEN TKTNUM ELSE NULL END) AS "MIDS"
    ,COUNT(CASE WHEN TO_CHAR(DTTM, 'HH24:MI') NOT BETWEEN '06:00' AND '22:00' THEN TKTNUM ELSE NULL END) AS "SWINGS"
    ,COUNT(TKTNUM) AS "TOTAL"
    FROM TKTHISTORY
    GROUP BY TO_CHAR(DTTM,'YYYY-MM-DD')
    ORDER BY TO_CHAR(DTTM,'YYYY-MM-DD')

DATE        DAYS    MIDS    SWINGS  TOTAL   
2019-08-01  8       13      1       22      22
2019-08-02  19      5       3       27      49
2019-08-03  23      6       6       35      84
2019-08-04  7       9       13      29      113
2019-08-05  4       17      2       23      136
2019-08-06  10      5       16      31      167
2019-08-07  3       12      11      26      193

第六列应该是日期的累计总和。我尝试浏览互联网并阅读有关“over”和“partition by”的内容,但我仍然不知道如何使用它:(

最佳答案

这是一个基于 Scott 的 EMP 表的示例,该表计算每个部门的工作岗位。最后一列是“运行总计”值。

样本数据显示,DEPTNO = 10 有 3 名员工,其中 5 名员工在 DEPTNO = 10 中。 20 和 6 部门30:

SQL> select deptno, empno, ename from emp order by deptno;

    DEPTNO      EMPNO ENAME
---------- ---------- ----------
        10       7782 CLARK
        10       7839 KING
        10       7934 MILLER
        20       7566 JONES
        20       7902 FORD
        20       7876 ADAMS
        20       7369 SMITH
        20       7788 SCOTT
        30       7521 WARD
        30       7844 TURNER
        30       7499 ALLEN
        30       7900 JAMES
        30       7698 BLAKE
        30       7654 MARTIN

14 rows selected.

查询如下所示:

SQL> select
  2    deptno,
  3    count(empno) emps_per_dept,
  4    sum(count(*)) over (order by deptno) total
  5  from emp
  6  group by deptno;

    DEPTNO EMPS_PER_DEPT      TOTAL
---------- ------------- ----------
        10             3          3
        20             5          8
        30             6         14

SQL>

就您而言,可能是这样的:

SELECT 
   ...
  ,sum(COUNT(TKTNUM)) over (order by TO_CHAR(DTTM,'YYYY-MM-DD')) AS "TOTAL"
FROM TKTHISTORY
...

关于oracle - oracle中如何进行累计求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776933/

相关文章:

c# - 大型数据库表的数据完整性

oracle - 如何截断所有用户表?

oracle - PLS-00222在此范围内不存在名称为 'WRITE_ERROR_LOG'的功能

sql - 获得下一个约会

SQL - 如何从总数中删除已计算的内容

javascript - 根据产品数量计算总计

R循环长数据返回最小值和累计值

mysql - 有什么方法可以根据表列中的内容搜索表名?

excel - 从 Excel 中的多个主体计算 PMT

sql-server - SQL - sql 中的累积总和,基于连续日期