Maison > base de données > tutoriel mysql > Comment résoudre l'erreur « n'est pas dans GROUP BY » de MySQL ?

Comment résoudre l'erreur « n'est pas dans GROUP BY » de MySQL ?

Mary-Kate Olsen
Libérer: 2024-12-20 04:56:18
original
392 Les gens l'ont consulté

How to Resolve MySQL's

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

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

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

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

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

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