Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement la valeur maximale et la valeur associée dans SQL avec le regroupement ?

Comment puis-je récupérer efficacement la valeur maximale et la valeur associée dans SQL avec le regroupement ?

DDD
Libérer: 2025-01-17 19:26:10
original
1011 Les gens l'ont consulté

How Can I Efficiently Retrieve the Maximum Value and Associated Value in SQL with Grouping?

Une solution élégante pour obtenir efficacement la valeur maximale et ses valeurs associées dans le regroupement SQL

En SQL, il est souvent délicat de trouver la valeur maximale dans une autre colonne et d'obtenir sa valeur associée en fonction de la troisième colonne après regroupement. Considérez le scénario suivant :

Les formulaires suivants sont disponibles :

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

Le but est de trouver la valeur VAL correspondant au NUM maximum pour chaque KEY. Les résultats attendus sont les suivants :

KEY VAL
A AB
B EF
C HI
D LM

Bien que la requête suivante puisse être utilisée pour atteindre l'objectif :

<code class="language-sql">select KEY, VAL
from TABLE_NAME TN
where NUM = (
    select max(NUM)
    from TABLE_NAME TMP
    where TMP.KEY = TN.KEY
    )</code>
Copier après la connexion

Mais quand il y a beaucoup de valeurs KEY, cette méthode semble maladroite. Cependant, utiliser la fonction row_number() offre une solution plus élégante :

<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 méthode utilise les concepts de partitionnement et de tri pour obtenir les résultats souhaités. En définissant la partition de row_number() sur KEY et en triant par NUM dans l'ordre décroissant, chaque ligne de chaque partition se voit attribuer un numéro de séquence. Sélectionnez ensuite la ligne portant le numéro de série 1 pour obtenir la valeur NUM maximale correspondant à chaque KEY et sa valeur VAL associée.

Il est important de noter que cette approche améliorée se comporte légèrement différemment de la requête d'origine. La requête d'origine peut renvoyer plusieurs lignes pour chaque KEY, tandis que cette solution garantit qu'une seule ligne par KEY est renvoyée. Si vous devez conserver le comportement d'origine, vous pouvez remplacer dense_rank() par rank() ou 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal