La PARTITION BY
establece el rango de registros que se usarán para cada "GRUPO" dentro del OVER
cláusula.
En su SQL de ejemplo, DEPT_COUNT
devolverá el número de empleados dentro de ese departamento para cada registro de empleado. (Es como si estuviera desnomalizando el emp
mesa; aún devuelve cada registro en el emp
mesa.)
emp_no dept_no DEPT_COUNT
1 10 3
2 10 3
3 10 3 <- three because there are three "dept_no = 10" records
4 20 2
5 20 2 <- two because there are two "dept_no = 20" records
Si hubiera otra columna (p. ej., state
) entonces podrías contar cuántos departamentos hay en ese estado.
Es como obtener los resultados de un GROUP BY
(SUM
, AVG
, etc.) sin agregar el conjunto de resultados (es decir, eliminar los registros coincidentes).
Es útil cuando usa el LAST OVER
o MIN OVER
funciones para obtener, por ejemplo, el salario más bajo y más alto en el departamento y luego usarlo en un cálculo contra este salario de registros sin una selección secundaria, que es mucho más rápida.
Lea el artículo de AskTom vinculado para obtener más detalles.