65 votes

#1055 - Expression de la liste de sélection n'est pas dans la clause GROUP BY et contient nonaggregated colonne ce qui est incompatible avec sql_mode=only_full_group_by

ma Requête :

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
  • Mysql 5.7.9 exécute la requête sans aucun problème, mais mysql 5.7.12 l'affichage de l'erreur ci-dessus Pourrait vous s'il vous plaît m'aider

106voto

baktete miloud Points 1137

J'ai eu une lutte pour obtenir que cela fonctionne je l'ai testé et il fonctionne sur lampe serveur mysql version 5.12

Ainsi, les étapes de la réussite:

  1. sudo vim /etc/mysql/conf.d/mysql.cnf
  2. Faites défiler vers le bas de la Copie de fichier et coller

    [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

à la fin du fichier

  1. enregistrer et quitter le mode de saisie de
  2. sudo service mysql restart de redémarrer MySQL.

Fait!

59voto

Henry Points 117

Cela a fonctionné pour moi:

mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Vous pourriez avoir besoin de sudo pour la première étape:

sudo mysql -u root -p

27voto

gr1zzly be4r Points 1490

Vous devez spécifier toutes les colonnes que vous ne l'utilisez pas pour une fonction d'agrégation dans votre GROUP BY clause de ce genre:

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

L' full_group_by mode essentiellement fait de vous écrire plus idiomatiques SQL. Vous pouvez désactiver ce paramètre si vous le souhaitez. Il y a différentes façons de le faire qui sont décrites dans la Documentation de MySQL. Voici MySQL définition de ce que j'ai dit ci-dessus:

MySQL 5.7.5 et met en œuvre la détection de la dépendance fonctionnelle. Si le ONLY_FULL_GROUP_BY SQL-mode est activé (ce qui est fait par défaut), MySQL rejette les requêtes pour lesquelles la liste de sélection, d'AVOIR l'état, ou COMMANDE PAR liste, reportez-vous à nonaggregated les colonnes qui ne sont ni nommés dans la clause GROUP BY ne sont fonctionnellement dépendants. (Avant 5.7.5, MySQL ne détecte pas de dépendance fonctionnelle et ONLY_FULL_GROUP_BY n'est pas activé par défaut. Pour une description de pré-5.7.5 comportement, voir le Manuel de Référence de MySQL 5.6.)

Vous obtenez l'erreur parce que vous êtes sur une version < 5.7.5

21voto

Anil Gupta Points 410

Vous pouvez désactiver sql_mode=only_full_group_by par certains de commande, vous pouvez essayer ce par terminal server ou MySql IDE

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

J'ai essayé et a travaillé pour moi. Merci :)

16voto

Tauqueer Hassan Points 61

Solution 1: Supprimer ONLY_FULL_GROUP_BY de console mysql

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

vous pouvez en lire plus ici

Solution 2: Supprimer ONLY_FULL_GROUP_BY partir de phpmyadmin

Open phpmyadmin & select localhost
Click on menu Variables & scroll down for sql mode
Click on edit button to change the values & remove ONLY_FULL_GROUP_BY & click on save. 

click here to see image

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X