Maison >base de données >tutoriel mysql >Comment la clause « KEEP » affecte-t-elle les fonctions d'agrégation « PARTITION BY » dans Oracle ?

Comment la clause « KEEP » affecte-t-elle les fonctions d'agrégation « PARTITION BY » dans Oracle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 09:35:10347parcourir

How Does the `KEEP` Clause Affect `PARTITION BY` Aggregate Functions in 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 :

  • Avec KEEP : Uniquement la ligne avec le plus bas le salaire au sein de chaque département est inclus dans le résultat.
  • Sans KEEP : Toutes les lignes de chaque département sont incluses dans le résultat, ce qui peut conduire à des valeurs de salaire minimum en double.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn