Maison > base de données > tutoriel mysql > Comment récupérer la VAL maximale pour chaque clé dans les données groupées à l'aide d'Oracle SQL ?

Comment récupérer la VAL maximale pour chaque clé dans les données groupées à l'aide d'Oracle SQL ?

Susan Sarandon
Libérer: 2025-01-17 19:11:08
original
310 Les gens l'ont consulté

How to Fetch the Maximal VAL for Each KEY in Grouped Data Using Oracle SQL?

Extraction de la VAL la plus élevée pour chaque clé dans Oracle SQL

Ce guide montre comment récupérer efficacement le maximum VAL pour chaque KEY dans les données groupées à l'aide d'Oracle SQL. Examinons un scénario courant :

Une table nommée TABLE_NAME contient les données suivantes :

KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM

L'objectif est de générer un ensemble de résultats affichant uniquement le maximum VAL pour chaque KEY unique :

KEY VAL
A AB
B EF
C HI
D LM

Solution Oracle SQL efficace (10g et versions ultérieures) :

Bien que les sous-requêtes puissent y parvenir, une solution plus élégante et souvent plus rapide utilise la ROW_NUMBER() fonction analytique :

<code class="language-sql">SELECT key, val
FROM (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY key ORDER BY num DESC) AS seqnum
    FROM table_name t
) t
WHERE seqnum = 1;</code>
Copier après la connexion

Cette requête attribue d'abord un rang (seqnum) à chaque ligne de chaque KEY partition, classé par NUM par ordre décroissant. Ensuite, il filtre les résultats pour inclure uniquement les lignes avec seqnum = 1, en sélectionnant efficacement la ligne avec le NUM le plus élevé (et donc, implicitement, le VAL le plus élevé en supposant une relation cohérente entre NUM et VAL au sein de chaque clé).

Remarque importante : Cette méthode garantit une ligne par KEY. Si vous devez gérer les liens potentiels dans NUM différemment (par exemple, renvoyer plusieurs lignes pour un KEY si plusieurs lignes partagent le maximum NUM), envisagez d'utiliser RANK() ou DENSE_RANK() au lieu de ROW_NUMBER().

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