ma question:
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
J'ai eu du mal à le faire fonctionner, je l'ai testé et il fonctionne sur le serveur de lampes mysql version 5.12.
Alors, étapes vers le succès:
Sudo vim /etc/mysql/conf.d/mysql.cnf
Faites défiler jusqu'au bas du fichier Copier 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
au bas du fichier
Sudo service mysql restart
pour redémarrer MySQL.Terminé!
Cela a fonctionné pour moi:
mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Vous aurez peut-être besoin de Sudo pour la première étape:
Sudo mysql -u root -p
Vous devez spécifier toutes les colonnes que vous n'utilisez pas pour une fonction d'agrégation dans votre clause GROUP BY
, comme ceci:
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
Le mode full_group_by
vous permet d'écrire davantage de SQL idiomatique. Vous pouvez désactiver ce paramètre si vous le souhaitez. Il existe différentes manières de le faire qui sont décrites dans le Documentation MySQL . Voici la définition de MySQL de ce que j'ai dit ci-dessus:
MySQL 5.7.5 et supérieur implémente la détection de la dépendance fonctionnelle. Si le mode SQL ONLY_FULL_GROUP_BY est activé (ce qu'il est par défaut), MySQL rejette les requêtes pour lesquelles la liste de sélection, la condition HAVING ou la liste ORDER BY font référence à des colonnes non agrégées qui ne sont ni nommées dans la clause GROUP BY ni fonctionnellement dépendantes. . (Avant la version 5.7.5, MySQL ne détectait pas la dépendance fonctionnelle et ONLY_FULL_GROUP_BY n'était pas activé par défaut. Pour une description du comportement avant la version 5.7.5, consultez le Manuel de référence de MySQL 5.6.)
Vous obtenez l'erreur parce que vous êtes sur une version <5.7.5
Vous pouvez désactiver sql_mode = only_full_group_by par une commande, vous pouvez essayer avec un terminal 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é cela et travaillé pour moi. Merci :)
Solution 1: supprimez ONLY_FULL_GROUP_BY de la console mysql
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
vous pouvez lire plus ici
Solution 2: Supprimez ONLY_FULL_GROUP_BY 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.
Vous devez agréger par n'importe quoi NOT IN
la clause group by
.
Donc, il y a deux options ... Ajouter Credit_Initial et Disponible_v au group by
OR
Changez-les en MAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v
si vous savez que les valeurs sont de toute façon constantes et n'ont aucun autre impact.
Configuration de base et par défaut de 5.7.5 ONLY_FULL_GROUP_BY Vous devez utiliser toutes les colonnes non agrégées de votre groupe en
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
La même chose s’est produite avec les versions 8.0+. Par défaut, dans la version 8.0+, il est "activé" par défaut. Voici le lien référence du document officiel
Dans le cas des versions 5.6+, 5.7+, la propriété "ONLY_FULL_GROUP_BY" est désactivée par défaut.
Pour le désactiver, suivez les mêmes étapes suggérées par @Miloud BAKTETE