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 ?
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!