Maison > base de données > tutoriel mysql > Comment puis-je récupérer correctement des colonnes non agrégées avec MAX() et GROUP BY de MySQL ?

Comment puis-je récupérer correctement des colonnes non agrégées avec MAX() et GROUP BY de MySQL ?

Linda Hamilton
Libérer: 2024-12-30 21:27:09
original
940 Les gens l'ont consulté

How Can I Correctly Retrieve Non-Aggregated Columns with MySQL's MAX() and GROUP BY?

Regroupement et agrégation avec MAX() dans MySQL

Dans MySQL, la fonction MAX() peut être utilisée en conjonction avec GROUP BY pour agréger les données et sélectionner la valeur maximale pour une colonne spécifiée dans chaque groupe. Cependant, si la colonne cible n'est pas unique au sein d'un groupe, la sélection des colonnes non agrégées correspondantes peut donner des résultats inattendus.

Pour illustrer ce problème, examinons la requête SQL suivante :

SELECT MAX(timestamp), rid, pid
FROM theTable
GROUP BY rid;
Copier après la connexion

Les résultats de cette requête peuvent ne pas correspondre au résultat souhaité, car la colonne pid sélectionnée peut ne pas correspondre à l'horodatage avec la valeur maximale.

Pour obtenir les résultats corrects, nous devons modifier la requête pour identifier les lignes avec le maximum d'horodatages au sein de chaque groupe, puis joindre ces lignes à la table d'origine pour obtenir les pids correspondants.

La requête SQL modifiée suivante accomplit cela :

SELECT test.pid, test.cost, test.timestamp, test.rid
FROM theTable AS test
INNER JOIN
    (SELECT rid, MAX(timestamp) AS ts
    FROM theTable
    GROUP BY rid) AS maxt
ON (test.rid = maxt.rid AND test.timestamp = maxt.ts);
Copier après la connexion

Cette requête identifie d'abord l'horodatage maximum pour chaque débarras à l'aide d'une sous-requête, puis la joint à la table d'origine. La condition de jointure garantit que les lignes sélectionnées sont celles avec le maximum d'horodatages au sein de chaque groupe rid.

En conséquence, le résultat souhaité est obtenu :

pid cost timestamp rid
5 345 2011-04-14 01:06:06 1
3 4455 2011-04-14 01:05:41 2
7 5435 2011-04-14 01:14:14 3

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