Maison >base de données >tutoriel mysql >Comment puis-je trouver efficacement la valeur maximale dans une colonne pour chaque groupe d'un grand tableau ?

Comment puis-je trouver efficacement la valeur maximale dans une colonne pour chaque groupe d'un grand tableau ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-21 08:12:10444parcourir

How Can I Efficiently Find the Maximum Value in a Column for Each Group in a Large Table?

Trouver la valeur maximale dans la colonne groupée d'un grand tableau

Dans cet exemple, vous devez extraire la ligne avec la valeur maximale d'une colonne spécifique de chaque groupe d'une grande table sans effectuer une recherche multi-tables inefficace. Considérez le formulaire suivant :

<code>SCORES
ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>

Votre objectif est de récupérer le dernier tour pour chaque identifiant unique et le score correspondant. Le résultat souhaité est le suivant :

<code>ID   ROUND   SCORE
1    2       6
2    2       12
3    1       6</code>

Solution efficace utilisant les fonctions de fenêtre

Une méthode efficace consiste à utiliser les fonctions de fenêtre en conjonction avec le mot-clé DISTINCT :

<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 utilise les concepts clés suivants :

  • PARTITION BY : Regroupe les lignes par colonne d'identifiant.
  • MAX(round): Calculez le nombre maximum de tours dans chaque partition.
  • FIRST_VALUE(score) : Récupère le premier (dernier) score pour chaque identifiant avec le nombre maximum de tours.
  • DISTINCT : garantit que seules les lignes uniques sont renvoyées, éliminant ainsi les résultats en double.

Cette requête optimisée renvoie efficacement le dernier tour et le dernier score pour chaque ID unique sans avoir besoin d'analyser la table plusieurs fois, restant efficace même pour les grandes tables.

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