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
Libérer: 2024-12-05 12:15:13
original
326 Les gens l'ont consulté

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

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

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!

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