报告功能允许针对结果集执行各种集合函数。与窗口功能一样,它们无法指定本地窗口,因此会为每个分区分配相同的结果。
示例Ex#1
-------------------------
SELECT HIREDATE,SUM(SAL) "SALARY",SUM(SUM(SAL)) OVER (ORDER BY HIREDATE ROWS BETWEEN
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) "TOTALSALARY"
FROM EMP
GROUP BY HIREDATE
ORDER BY HIREDATE;
示例Ex#2
-------------------------
SELECT HIREDATE,
SUM(SAL) "SALARY",
SUM(SUM(SAL)) OVER (ORDER BY HIREDATE ROWS BETWEEN
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) "WINDOWSALARY" ,
SUM(SUM(SAL)) OVER() "REPORTINGSALES"
FROM EMP GROUP BY HIREDATE ORDER BY HIREDATE;
列过分句后的空洞表示,应将整个结果包括在总和中,这与使用无界的窗口函数具有相同的效果。在进行详细信息和汇总时,必须使用报告功能。
示例示例3
==================
SELECT HIREDATE,SUM(SAL) "SALARY",
SUM(SUM(SAL)) OVER() "REPORTINGSALES"
FROM EMP
WHERE JOB='MANAGER'
GROUP BY HIREDATE ORDER BY HIREDATE;
像排序函数一样,报告功能也可以通过分句包括分区,以将结果集分割为多个部分,从而可以将多个集合计算为结果集的不同子集。
示例示例4
==================
SELECT DEPTNO,EMPNO,SUM(SAL)"SALARY",SUM(SUM(SAL)) OVER(PARTITION BY DEPTNO) "DEPTSAL"
FROM EMP
GROUP BY DEPTNO,EMPNO
ORDER BY DEPTNO,EMPNO
RATIO_TO_REPORT
---------------------------------------
示例样本#5
=============
SELECT DEPTNO,
EMPNO,
SUM(SAL)"SALARY",
ROUND(SUM(SAL)/SUM(SUM(SAL)) OVER(PARTITION BY DEPTNO),2) "DEPTPERCENT"
FROM EMP
GROUP BY DEPTNO,EMPNO
ORDER BY DEPTNO,EMPNO;
示例Ex#6
=============
SELECT DEPTNO,
EMPNO,
SUM(SAL)"SALARY",
ROUND(RATIO_TO_REPORT(SUM(SAL)) OVER(PARTITION BY DEPTNO),2) "DEPTRATIO"
FROM EMP
GROUP BY DEPTNO,EMPNO
ORDER BY DEPTNO,EMPNO;
From: https://bytes.com/topic/oracle/insights/676936-reporting-function