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 ?
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>
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>
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 :
<code class="language-sql">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;</code>
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!