Este artículo ofrece una descripción general de la función analítica RATIO_TO_REPORT. Si es nuevo en las funciones analíticas, probablemente debería leer primero esta introducción a las funciones analíticas.
- Preparar
- Función Analítica RATIO_TO_REPORT
- Enlace rápido
Preparar
Los ejemplos de este artículo requieren la siguiente tabla.
--DROP TABLE emp PURGE; CREATE TABLE emp ( empno NUMBER(4) CONSTRAINT pk_emp PRIMARY KEY, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) ); INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87','dd-mm-rr')-85,3000,NULL,20); INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87', 'dd-mm-rr')-51,1100,NULL,20); INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10); COMMIT;
Función analítica RATIO_TO_REPORT
La descripción básica de la función analítica RATIO_TO_REPORT se muestra a continuación.
RATIO_TO_REPORT(expr) OVER ([ query_partition_clause ])
La función analítica RATIO_TO_REPORT muestra la relación entre el valor especificado y la suma de los valores del conjunto. No admite la orden ni las cláusulas de ventanas. Omitir una cláusula de partición de la cláusula OVER significa que todo el conjunto de resultados se trata como una sola partición. En el siguiente ejemplo, calculamos la relación del salario actual en comparación
SELECT empno, ename, deptno, sal, RATIO_TO_REPORT(sal) OVER () AS r2r_sal FROM emp ORDER BY sal; EMPNO ENAME DEPTNO SAL R2R_SAL ---------- ---------- ---------- ---------- ---------- 7369 SMITH 20 800 .0275624462 7900 JAMES 30 950 .0327304048 7876 ADAMS 20 1100 .0378983635 7521 WARD 30 1250 .0430663221 7654 MARTIN 30 1250 .0430663221 7934 MILLER 10 1300 .044788975 7844 TURNER 30 1500 .0516795866 7499 ALLEN 30 1600 .0551248923 7782 CLARK 10 2450 .0844099914 7698 BLAKE 30 2850 .0981912145 7566 JONES 20 2975 .102497847 7788 SCOTT 20 3000 .103359173 7902 FORD 20 3000 .103359173 7839 KING 10 5000 .172265289 SQL>
Agregar la cláusula de partición nos permite calcular la proporción dentro de una partición. En el siguiente ejemplo, mostramos la relación entre el salario actual y la suma de los salarios dentro del departamento.
SELECT empno, ename, deptno, sal, RATIO_TO_REPORT(sal) OVER (PARTITION BY deptno) AS r2r_sal_per_dept FROM emp ORDER BY deptno, sal; EMPNO ENAME DEPTNO SAL R2R_SAL_PER_DEPT ---------- ---------- ---------- ---------- ---------------- 7934 MILLER 10 1300 .148571429 7782 CLARK 10 2450 .28 7839 KING 10 5000 .571428571 7369 SMITH 20 800 .0735632184 7876 ADAMS 20 1100 .101149425 7566 JONES 20 2975 .273563218 7788 SCOTT 20 3000 .275862069 7902 FORD 20 3000 .275862069 7900 JAMES 30 950 .10106383 7654 MARTIN 30 1250 .132978723 7521 WARD 30 1250 .132978723 7844 TURNER 30 1500 .159574468 7499 ALLEN 30 1600 .170212766 7698 BLAKE 30 2850 .303191489 SQL>