J'ai cette requête

SELECT substring(TGLLAHIR, 1, 7) as TGLLAHIR_,
       substring(TGLLAHIR, 5, 2) as BULAN, `TGLLAHIR` as `TGL`
FROM `m_pasien` 
WHERE substring(TGLLAHIR,1,4) = '2013' 
GROUP BY substring(TGLLAHIR, 1, 7) 
ORDER BY `TGLLAHIR` ASC

Mais une erreur de message s'affiche

L'expression n ° 2 de la liste SELECT n'est pas dans la clause GROUP BY et contient la colonne non agrégée 'rsukemba_kojarsuk.m_pasien.TGLLAHIR' qui n'est pas fonctionnellement dépendante des colonnes de la clause GROUP BY; ceci est incompatible avec sql_mode = only_full_group_by

Comment résoudre ce problème?

2
user7474611 26 janv. 2017 à 18:54

4 réponses

Meilleure réponse

Vous n'avez pas besoin de group by, utilisez plutôt distinct

SELECT  distinct 
        substring(TGLLAHIR, 1, 7) as TGLLAHIR_
       ,substring(TGLLAHIR, 5, 2) as BULAN
       ,`TGLLAHIR` as `TGL` 
FROM `m_pasien` 
WHERE substring(TGLLAHIR,1,4) = '2013' 
ORDER BY `TGLLAHIR` ASC
0
David דודו Markovitz 26 janv. 2017 à 16:20

Je pense que ce problème est dû au mode strict activé dans votre version MySQL. Veuillez désactiver le mode strict et réessayer.

Pour vérifier si le mode strict est activé ou non, exécutez le sql ci-dessous:

SHOW VARIABLES LIKE 'sql_mode';

Si l'une des valeurs est STRICT_TRANS_TABLES, le mode strict est activé.

Pour désactiver le mode strict, exécutez le sql ci-dessous:

set global sql_mode='';

Réessayer..

0
Diego Santa Cruz Mendezú 6 janv. 2020 à 16:21

Vous devez utiliser la fonction d'agrégation ANY_VALUE() pour supprimer ce message d'avertissement et rendre la requête exécutable. MySQL ne sait pas quelle valeur du champ non agrégé il doit inclure dans l'ensemble de résultats. Chaque champ qui ne fait pas partie de la clause GROUP BY doit être encapsulé dans la fonction d'agrégation Voici à quoi il devrait ressembler:

SELECT substring(TGLLAHIR, 1, 7) as TGLLAHIR_,
       substring(TGLLAHIR, 5, 2) as BULAN, 
ANY_VALUE(`TGLLAHIR`) as `TGL`
FROM `m_pasien` 
WHERE substring(TGLLAHIR,1,4) = '2013' 
GROUP BY substring(TGLLAHIR, 1, 7) 
ORDER BY `TGLLAHIR` ASC

Et voici l'explication de ce point dans la référence MySQL: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

0
G.Denis 12 janv. 2018 à 14:50

Il semble que vous abusez de la clause group by dans cette requête. Grouper par est utile lors de l'agrégation de données. Par exemple, si vous aviez un tableau des comptes, des dates et des montants de dépôt; et vous vouliez connaître le total des dépôts sur chaque compte pour toutes les dates, vous pourriez écrire quelque chose comme

select account, sum(deposits)
    from some_table
    group by account

Vous ne savez pas exactement ce que vous essayez de faire exactement, et encore plus difficile parce que vos variables aux noms étranges sont listées sans aucun contexte. MAIS! il est probablement prudent de dire que vous n'avez pas besoin d'utiliser un groupe ici, alors supprimez-le.

P.S. Je me méfierais de faire un select distinct à moins que vous ne sachiez ce que vous jetez et que vous soyez certain que vous n'en avez pas besoin.

0
KindaTechy 26 janv. 2017 à 16:42