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
Libérer: 2025-01-21 08:12:10
original
493 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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 :

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 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 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