Maison >base de données >tutoriel mysql >Comment la clause « KEEP » affecte-t-elle les fonctions d'agrégation « PARTITION BY » dans Oracle ?
PARTITION BY avec et sans KEEP dans Oracle
La clause PARTITION BY dans Oracle permet aux utilisateurs de regrouper les lignes d'une table en fonction des colonnes spécifiées pour les calculs globaux. Dans certains cas, la clause KEEP peut être utilisée conjointement avec PARTITION BY pour contrôler la conservation des lignes individuelles au sein de chaque partition.
Syntaxe avec KEEP :
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
Dans cette syntaxe, la clause KEEP est suivie de DENSE_RANK FIRST, indiquant que la ligne avec le salaire le plus bas doit être conservée dans chaque partition. DENSE_RANK garantit un classement continu, ce qui signifie que les lignes avec des salaires identiques auront le même rang.
Syntaxe sans KEEP :
MIN(sal) OVER (PARTITION BY deptno)
Dans cette syntaxe, la clause KEEP est omise . Sans KEEP, toutes les lignes de chaque partition sont prises en compte pour le calcul global, ce qui peut conduire à l'inclusion de plusieurs lignes avec des valeurs identiques dans le résultat.
Différence :
La principale différence entre les deux requêtes est que :
KEEP redondant :
Dans l'exemple fourni, la clause KEEP est redondante car la fonction MIN est également appliqué à la même colonne (sal). Par conséquent, la première ligne classée en fonction du salaire sera toujours celle avec le salaire le plus bas.
Exemple avec une colonne de classement différente :
Cependant, si une colonne de commande différente est la colonne de tri est utilisée pour la clause KEEP, elle peut avoir un effet différent :
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY name) OVER (PARTITION BY deptno)
Dans ce cas, la ligne avec le salaire le plus bas parmi celles avec le même l’ordre (nom) sera conservé dans chaque partition. Cela permet aux utilisateurs de sélectionner le salaire le plus bas pour les employés portant des noms spécifiques au sein de chaque département.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!