Maison > base de données > tutoriel mysql > Comment récupérer efficacement la valeur la plus élevée d'une colonne regroupée par ID dans SQL ?

Comment récupérer efficacement la valeur la plus élevée d'une colonne regroupée par ID dans SQL ?

Barbara Streisand
Libérer: 2025-01-21 08:09:39
original
1011 Les gens l'ont consulté

How to Efficiently Retrieve the Highest Value of a Column Grouped by ID in SQL?

Requête SQL pour rechercher la valeur maximale de la colonne regroupée par ID

Cet article aborde le problème de la récupération efficace de la valeur la plus élevée d'une colonne, regroupée par un identifiant unique dans une table de base de données. Illustrons avec le tableau "SCORES":

<code>ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>
Copier après la connexion

Notre objectif est d'obtenir la ligne contenant la valeur "ROUND" maximale pour chaque "ID", ainsi que son "SCORE" correspondant. Le résultat souhaité est :

<code>ID   ROUND   SCORE
1    3       2
2    2       12
3    1       6</code>
Copier après la connexion

Bien qu'une approche par sous-requête soit possible, elle peut s'avérer inefficace pour les grands ensembles de données. Une méthode supérieure utilise les fonctions de fenêtre :

SELECT DISTINCT
       id
      ,max(round) OVER (PARTITION BY id) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;
Copier après la connexion

Cette requête exploite max(round) OVER (PARTITION BY id) pour déterminer le "ROUND" maximum pour chaque "ID". first_value(score) OVER (PARTITION BY id ORDER BY round DESC) récupère ensuite le "SCORE" associé à ce "ROUND" maximum. DISTINCT garantit qu'une seule ligne par "ID" est renvoyée.

Cette approche de fonction de fenêtre évite plusieurs analyses de tables, offrant ainsi une solution nettement plus efficace pour les grandes bases 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!

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