Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :n'est pas dans GROUP BY

Vous devez avoir un groupe complet d'ici :

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

SQL92 exige que toutes les colonnes (à l'exception des agrégats) de la clause select fassent partie de la clause group by. SQL99 assouplit un peu cette restriction et stipule que toutes les colonnes de la clause select doivent être fonctionnellement dépendantes de la clause group by. MySQL par défaut autorise le regroupement partiel par et cela peut produire des réponses non déterministes, exemple :

create table t (x int, y int);
insert into t (x,y) values (1,1),(1,2),(1,3);
select x,y from t group by x;
+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
+------+------+

C'est à dire. un y aléatoire est sélectionné pour le groupe x. On peut empêcher ce comportement en définissant @@sql_mode :

set @@sql_mode='ONLY_FULL_GROUP_BY';
select x,y from t group by x; 
ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY