Maison >base de données >tutoriel mysql >Pourquoi MySQL génère-t-il une erreur « n'est pas dans GROUP BY » ?

Pourquoi MySQL génère-t-il une erreur « n'est pas dans GROUP BY » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 12:15:13337parcourir

Why Does MySQL Throw an

Erreur « n'est pas dans GROUP BY » de MySQL : une explication complète

Lors de l'exécution d'une requête MySQL qui combine un SELECT COUNT et un SELECT avec GROUP BY, c'est Il est possible de rencontrer un écart dans le nombre de résultats. La raison derrière cela est souvent le fameux message d'erreur "'field_name' n'est pas dans GROUP BY".

Pour comprendre l'erreur, décomposons le problème :

MySQL et GROUP BY

GROUP BY regroupe les lignes en fonction des valeurs d'une ou plusieurs colonnes spécifiées. Dans notre cas, la requête avec GROUP BY comporte des clauses comme le nom GROUP BY. Cela signifie que seules les lignes avec des valeurs de nom uniques seront regroupées.

SQL92 contre SQL99 contre MySQL

SQL92 exigeait à l'origine que toutes les colonnes de la clause SELECT soient également dans la clause GROUP BY. Cependant, SQL99 a assoupli cette restriction, permettant aux colonnes fonctionnellement dépendantes des colonnes GROUP BY d'être incluses dans la clause SELECT.

MySQL, par défaut, autorise le "regroupement partiel par", ce qui signifie qu'il autorise les colonnes dans le Clause SELECT qui ne figure pas explicitement dans la clause GROUP BY. Cependant, cela peut conduire à des résultats non déterministes.

La solution

Pour résoudre le problème, assurez-vous que toutes les colonnes de la clause SELECT font partie de la clause GROUP BY ou dépendent fonctionnellement de il. Dans notre exemple, le type, la langue et le code doivent être ajoutés à la clause GROUP BY :

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

Groupe complet par vs. Groupe partiel par

MySQL propose également un paramètre, @ @sql_mode, qui peut être configuré pour appliquer un groupe complet par :

set @@sql_mode='ONLY_FULL_GROUP_BY';

Avec ce paramètre, toute requête qui n'a pas de groupe complet par entraînera un erreur.

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