A
PARTITION BY
cláusula define o intervalo de registros que serão usados para cada "GROUP" dentro do OVER
cláusula. No seu exemplo SQL,
DEPT_COUNT
retornará o número de funcionários desse departamento para cada registro de funcionário. (É como se você estivesse desnomalizando o emp
tabela; você ainda retorna todos os registros no emp
tabela.) 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
Se houver outra coluna (por exemplo,
state
), então você poderia contar quantos departamentos naquele Estado. É como obter os resultados de um
GROUP BY
(SUM
, AVG
, etc.) sem agregar o conjunto de resultados (ou seja, remover registros correspondentes). É útil quando você usa o
LAST OVER
ou MIN OVER
funções para obter, por exemplo, o salário mais baixo e mais alto do departamento e, em seguida, usar isso em um cálculo contra esse salário de registros sem um sub select, que é muito mais rápido. Leia o artigo do AskTom vinculado para obter mais detalhes.