Maison > base de données > tutoriel mysql > Comment la clause « KEEP » affecte-t-elle « PARTITION BY » dans Oracle Aggregate Functions ?

Comment la clause « KEEP » affecte-t-elle « PARTITION BY » dans Oracle Aggregate Functions ?

Linda Hamilton
Libérer: 2024-12-29 21:06:21
original
382 Les gens l'ont consulté

How Does the `KEEP` Clause Affect `PARTITION BY` in Oracle Aggregate Functions?

PARTITION BY avec et sans KEEP dans Oracle

La clause PARTITION BY dans Oracle vous permet de regrouper des lignes dans une table et d'effectuer des fonctions d'agrégation sur ces groupes. La clause KEEP, lorsqu'elle est utilisée avec la clause PARTITION BY, vous permet de spécifier les lignes à conserver lors du calcul de la fonction d'agrégation.

Considérez les deux requêtes suivantes :

SELECT empno,
   deptno,
   sal,
   MIN(sal) OVER (PARTITION BY deptno) "Lowest",
   MAX(sal) OVER (PARTITION BY deptno) "Highest"
FROM empl

SELECT empno,
   deptno,
   sal,
   MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest",
   MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest"
FROM empl
Copier après la connexion

Les deux requêtes semblent pour avoir le même résultat : ils calculent les salaires les plus bas et les plus élevés pour chaque département. Cependant, il existe une différence subtile entre les deux requêtes.

Dans la première requête, les fonctions MIN et MAX sont appliquées à toutes les lignes de chaque partition. Dans la deuxième requête, la clause KEEP est utilisée pour spécifier que seules les première et dernière lignes de chaque partition doivent être incluses dans le calcul.

La clause KEEP peut être utilisée avec n'importe quelle fonction d'agrégation. Elle est particulièrement utile lorsque vous souhaitez rechercher la première ou la dernière occurrence d'une valeur dans un ensemble de lignes.

Par exemple, la requête suivante recherche le prénom et le nom des employés ayant les salaires les plus élevés dans chaque service. :

SELECT empno,
   deptno,
   sal,
   MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "First Highest Salary",
   MAX(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Last Highest Salary"
FROM empl
GROUP BY deptno
Copier après la connexion

La clause KEEP peut également être utilisée pour optimiser les performances. En spécifiant que seules la première ou la dernière ligne de chaque partition doivent être incluses dans le calcul, vous pouvez réduire la quantité de données que la base de données doit traiter. Cela peut améliorer les performances de votre requête, surtout si vous travaillez avec un grand ensemble de données.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal