Maison > base de données > tutoriel mysql > Comment récupérer efficacement les valeurs associées aux valeurs maximales des colonnes au sein des groupes dans Oracle SQL ?

Comment récupérer efficacement les valeurs associées aux valeurs maximales des colonnes au sein des groupes dans Oracle SQL ?

Linda Hamilton
Libérer: 2025-01-17 19:21:37
original
629 Les gens l'ont consulté

How to Efficiently Retrieve Values Associated with Maximum Column Values Within Groups in Oracle SQL?

Oracle SQL : Extraction de valeurs liées aux valeurs maximales de colonnes au sein des groupes

Une tâche courante de base de données consiste à sélectionner des valeurs associées à la valeur maximale d'une colonne, en particulier lorsqu'il s'agit de données groupées. Considérons un tableau avec les colonnes KEY, NUM et VAL :

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 trouver le maximum NUM pour chaque KEY et son VAL correspondant. Le résultat souhaité :

KEY VAL
A AB
B EF
C HI
D LM

Une méthode utilise une sous-requête :

select KEY, VAL
from TABLE_NAME TN
where NUM = (
    select max(NUM)
    from TABLE_NAME TMP
    where TMP.KEY = TN.KEY
    );
Copier après la connexion

Cependant, une approche plus efficace et plus lisible utilise la fonction ROW_NUMBER() :

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;
Copier après la connexion

Cela attribue un classement au sein de chaque KEY groupe en fonction de valeurs NUM décroissantes. La clause WHERE filtre ensuite le premier rang (seqnum = 1), donnant le résultat souhaité :

KEY VAL
A AB
B EF
C HI
D LM

Bien que les deux méthodes aboutissent au même résultat, l'approche ROW_NUMBER() offre généralement de meilleures performances et une meilleure clarté, en particulier avec des ensembles de données plus volumineux. Le choix optimal dépend des besoins et des préférences spécifiques, mais ROW_NUMBER() offre une solution robuste et élégante à ce problème SQL courant.

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 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