L' PARTITION BY
clause définit la plage d'enregistrements qui seront utilisés pour chaque "GROUPE" au sein de l' OVER
de la clause.
Dans votre exemple, SQL, DEPT_COUNT
retourne le nombre d'employés au sein du département pour chaque enregistrement de l'employé. (C'est comme si votre de-nomalising l' emp
tableau, vous avez toujours renvoyer tous les enregistrements dans l' emp
table.)
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 il y avait une autre colonne (par exemple, state
) alors on pourrait compter le nombre de ministères dans cet État.
Il est semblable à obtenir les résultats d'un GROUP BY
(SUM
, AVG
, etc.) sans l'agrégation de l'ensemble de résultats.
Il est utile lorsque vous utilisez l' LAST OVER
ou MIN OVER
des fonctions pour obtenir, par exemple, le plus bas et le plus haut salaire dans le département et ensuite l'utiliser dans un calulation contre cette des enregistrements de salaire sans un sous, sélectionnez, qui est beaucoup plus rapide.
Lire liés AskTom l'article pour plus de détails.