Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement des valeurs basées sur le maximum d'une colonne associée dans SQL ?

Comment puis-je récupérer efficacement des valeurs basées sur le maximum d'une colonne associée dans SQL ?

Susan Sarandon
Libérer: 2025-01-17 19:07:10
original
232 Les gens l'ont consulté

How Can I Efficiently Retrieve Values Based on the Maximum of a Related Column in SQL?

Obtenir efficacement des données basées sur la valeur maximale de la colonne concernée

Dans les scénarios où vous devez récupérer une valeur de colonne spécifique basée sur la valeur maximale de la colonne associée et regroupée par une troisième colonne, SQL fournit une solution optimisée. Considérez le tableau suivant, qui contient des données pour 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

Le but est de récupérer les résultats suivants à partir de ces données :

KEY VAL
A AB
B EF
C HI
D LM

Bien que la requête fournie dans la question obtienne ce résultat, il existe une manière plus élégante d'utiliser row_number() :

<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 partitionne efficacement les lignes en fonction de la colonne KEY et attribue des numéros de ligne par ordre décroissant seqnum dans chaque partition. En sélectionnant les lignes où seqnum est égal à 1, on obtient le résultat souhaité et conserve le regroupement souhaité.

Il convient de noter que cette méthode diffère légèrement de la requête d'origine dans la mesure où elle renvoie toujours une ligne par clé, alors que la requête d'origine peut renvoyer plusieurs lignes. Si ce comportement est souhaité, rank() ou dense_rank() peut être utilisé à la place 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