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
Barbara Streisandoriginal
2025-01-21 08:09:39989parcourir

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>

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!

Déclaration:
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