Maison >base de données >tutoriel mysql >Comment récupérer l'e-mail le plus récent de chaque expéditeur à l'aide de GROUP BY et ORDER BY de MySQL ?
Explication détaillée et application des clauses GROUP BY
et ORDER BY
de MySQL
Lorsque vous travaillez avec des tables de données dans une base de données MySQL, il est crucial de comprendre l'interaction des clauses GROUP BY
et ORDER BY
. Considérez le scénario suivant :
Vous devez regrouper les lignes du tableau des e-mails par adresse e-mail de l'expéditeur, dans le but de récupérer le dernier e-mail de chaque expéditeur. Cependant, la requête suivante :
<code class="language-sql">SELECT `timestamp`, `fromEmail`, `subject` FROM `incomingEmails` GROUP BY LOWER(`fromEmail`) ORDER BY `timestamp` DESC</code>
produira des résultats incorrects. Il regroupe les e-mails par expéditeur, mais peut ne pas afficher les derniers sujets de chaque groupe. Les résultats peuvent afficher :
<code>fromEmail: [email protected], subject: hello fromEmail: [email protected], subject: welcome</code>
Et les données réelles contiennent :
<code>fromEmail: [email protected], subject: hello fromEmail: [email protected], subject: programming question fromEmail: [email protected], subject: welcome</code>
Solution : utilisez la sous-requête et la fonction ANY_VALUE()
Pour résoudre ce problème, vous pouvez utiliser une sous-requête en combinaison avec la fonction ANY_VALUE()
:
<code class="language-sql">SELECT * FROM ( SELECT `timestamp`, `fromEmail`, ANY_VALUE(`subject`) AS `subject` FROM `incomingEmails` ORDER BY `timestamp` DESC ) AS tmp_table GROUP BY LOWER(`fromEmail`)</code>
Dans MySQL 5.7 et versions ultérieures, ANY_VALUE()
permet l'utilisation de colonnes non agrégées dans une instruction GROUP BY
avec une clause SELECT
. Il sélectionne de manière aléatoire une valeur dans chaque groupe, garantissant que la sous-requête récupère le sujet le plus récent pour l'adresse e-mail de chaque expéditeur.
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!