Erreur MySQL "n'est pas dans GROUP BY"
Cette erreur se produit lorsque vous incluez des colonnes non agrégées dans la clause SELECT d'un requête avec une clause GROUP BY qui ne répond pas aux exigences du groupe par. Dans ce cas, la requête :
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name` ORDER BY `count` DESC LIMIT 0, 25
déclenche l'erreur car le type, la langue et le code ne sont pas inclus dans GROUP BY. Pour résoudre ce problème, vous devez incorporer toutes les colonnes non agrégées dans le groupe par exigences :
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
SQL Group By Requirements
SQL92 exige que chaque colonne référencée les fonctions en dehors de l'agrégation dans la clause SELECT doivent être incluses dans la clause GROUP BY. Cependant, SQL99 assouplit cette exigence pour indiquer que ces colonnes doivent être fonctionnellement dépendantes de la clause group by.
MySQL Group By Behavior
MySQL autorise le group by by by par défaut, ce qui peut donner lieu à des résultats non déterministes. Par exemple, considérons la requête suivante :
create table t (x int, y int); insert into t (x,y) values (1,1),(1,2),(1,3); select x,y from t group by x;
Cette requête peut renvoyer une valeur y aléatoire pour chaque groupe x, comme démontré dans le résultat suivant :
+------+------+ | x | y | +------+------+ | 1 | 1 | +------+------+
Prévenir Partial Group By
Pour éviter ce comportement indéterminé, vous pouvez définir @@sql_mode sur 'ONLY_FULL_GROUP_BY' :
set @@sql_mode='ONLY_FULL_GROUP_BY'; select x,y from t group by x; ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY
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!