Maison >base de données >tutoriel mysql >Pourquoi MySQL génère-t-il une erreur « Expression de la liste SELECT pas dans la clause GROUP BY » et comment puis-je la corriger ?

Pourquoi MySQL génère-t-il une erreur « Expression de la liste SELECT pas dans la clause GROUP BY » et comment puis-je la corriger ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 07:53:14307parcourir

Why Does MySQL Throw a

Comment résoudre l'erreur « Expression de la liste SELECT pas dans la clause GROUP BY » dans MySQL

Dans MySQL, l'exécution de requêtes peut parfois entraîner des erreurs liées au sql_mode paramètre. L'une de ces erreurs est :

#1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this is incompatible with sql_mode=only_full_group_by

Cette erreur se produit lorsqu'une requête inclut une colonne dans la liste SELECT qui n'est pas incluse dans la clause GROUP BY et n'est pas agrégée (par exemple, en utilisant SUM, COUNT, etc. ). Pour résoudre ce problème, la requête doit être modifiée pour inclure la colonne non agrégée dans la clause GROUP BY ou pour l'agréger.

Dans la requête MySQL fournie :

select libelle, credit_initial, disponible_v, sum(montant) as montant
FROM fiche, annee, type
where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp)
GROUP BY libelle
order by libelle asc

La requête non agrégée -la colonne agrégée est disponible_v. Pour résoudre l'erreur, ajoutez-la à la clause GROUP BY :

...
GROUP BY libelle, disponible_v
...

Vous pouvez également agréger disponible_v à l'aide d'une fonction telle que SUM ou AVG :

...
GROUP BY libelle
HAVING SUM(disponible_v) > 0
...

Pour les versions MySQL antérieures à 8.0 , vous devrez peut-être ajuster le paramètre sql_mode dans le fichier de configuration MySQL /etc/mysql/conf.d/mysql.cnf en ajoutant ce qui suit lignes :

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Redémarrez MySQL après avoir apporté les modifications au fichier de configuration.

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