Maison > base de données > tutoriel mysql > Comment sélectionner le maximum par groupe dans MySQL ?

Comment sélectionner le maximum par groupe dans MySQL ?

Susan Sarandon
Libérer: 2024-11-22 09:56:11
original
1020 Les gens l'ont consulté

How to Select the Group-Wise Maximum in MySQL?

Sélection du maximum Group-Wise dans MySQL

Dans les bases de données relationnelles, vous devez parfois récupérer la ligne avec la valeur maximale d'une colonne spécifique pour chaque groupe. C'est ce qu'on appelle la sélection du maximum par groupe. Dans MySQL, il existe plusieurs approches pour y parvenir.

Méthode de sous-requête

Une méthode efficace consiste à utiliser une sous-requête :

SELECT *
FROM (
  SELECT id, MAX(version_id) AS version_id
  FROM table
  GROUP BY id
) AS t1
INNER JOIN table AS t2
  ON t2.id = t1.id AND t1.version_id = t2.version_id;
Copier après la connexion

Cette sous-requête crée une table des ID de version maximum pour chaque ID, puis le joint à la table d'origine pour récupérer les lignes correspondantes. Il est relativement efficace et suppose l'existence d'un index sur les colonnes (id, version_id).

Méthodes d'agrégation et de classement

Alternativement, vous pouvez utiliser des fonctions d'agrégation et de classement :

SELECT id,
       version_id,
       field1,
       field2
FROM (
  SELECT id,
          version_id,
          field1,
          field2,
          RANK() OVER (PARTITION BY id ORDER BY version_id DESC) AS ranking
  FROM table
) AS ranked_table
WHERE ranking = 1;
Copier après la connexion

Cette requête classe les lignes de chaque ID par ordre décroissant de version_id et sélectionne celles avec un classement de 1, effectivement filtrage pour la version maximale.

Fonctions de fenêtre

Les fonctions de fenêtre peuvent également être utilisées à cette fin :

SELECT id,
       version_id,
       field1,
       field2
FROM (
  SELECT id,
          version_id,
          field1,
          field2,
          MAX(version_id) OVER (PARTITION BY id) AS max_version_id
  FROM table
) AS windowed_table
WHERE version_id = max_version_id;
Copier après la connexion

Cette requête calcule l'ID de version maximum pour chaque ID en utilisant la fonction de fenêtre MAX() over() et sélectionne les lignes avec les ID de version correspondants.

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!

source:php.cn
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