sql >> Base de Datos >  >> RDS >> Mysql

MySQL:no está en GRUPO POR

Necesitas tener un grupo completo antes de:

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

SQL92 requiere que todas las columnas (excepto los agregados) en la cláusula select formen parte de la cláusula group by. SQL99 afloja un poco esta restricción y establece que todas las columnas en la cláusula de selección deben depender funcionalmente de la cláusula group by. MySQL por defecto permite el agrupamiento parcial y esto puede producir respuestas no deterministas, ejemplo:

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 |
+------+------+

Es decir. se selecciona una y aleatoria para el grupo x. Uno puede prevenir este comportamiento configurando @@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