Maison  >  Article  >  base de données  >  Comment corriger l'erreur MySQL « L'expression de la liste SELECT n'est pas dans la clause GROUP BY » ?

Comment corriger l'erreur MySQL « L'expression de la liste SELECT n'est pas dans la clause GROUP BY » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-21 02:24:12427parcourir

How to Fix the MySQL

Dépannage de l'erreur « L'expression de la liste SELECT n'est pas dans la clause GROUP BY »

Problème :

Lors de l'exécution d'un requête qui inclut des colonnes non agrégées dans la clause GROUP BY, vous rencontrez le problème suivant erreur :

#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

Raison :

Cette erreur se produit lorsque vous avez des colonnes non agrégées dans la liste SELECT qui ne sont pas incluses dans la clause GROUP BY. Dans MySQL version 5.7.12, le mode SQL only_full_group_by est activé par défaut, ce qui applique des règles de regroupement plus strictes.

Solution :

Pour résoudre cette erreur, vous pouvez soit :

1. Ajoutez les colonnes non agrégées à la clause GROUP BY :

Cela garantit que la requête ne renvoie que les lignes qui ont les mêmes valeurs pour toutes les colonnes de la clause GROUP BY.

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, credit_initial, disponible_v
ORDER BY libelle ASC;

2. Désactivez le mode SQL only_full_group_by :

Cela permet à la requête de renvoyer des lignes qui peuvent ne pas avoir les mêmes valeurs pour toutes les colonnes de la clause GROUP BY.

sudo vim /etc/mysql/conf.d/mysql.cnf

Faites défiler jusqu'à en bas du fichier et ajoutez les lignes suivantes :

[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

Enregistrez et quittez vim. Redémarrez MySQL :

sudo service mysql restart

Après le redémarrage de MySQL, la requête devrait s'exécuter avec succès sans 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!

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