only_full_group_by =encendido le dice al motor MySQL:No aplicar GROUP BY
cuando tenga dudas sobre qué resultados mostrar y arroje un error. Solo aplicarlo si Group By
le dice específicamente qué hacer. es decir, cuando Group By
es completo y perfecto!
only_full_group_by =desactivado le dice al motor MySQL:siempre aplique GROUP BY
y si tienes dudas sobre qué resultados elegir, ¡elige uno al azar!
No tienes que apagarlo si usas GROUP BY
correctamente!
Ejemplo:
Tabla:usuarios
id | name
----------------
1 ali
2 john
3 ali
Cuando usas GROUP BY
en el name
columna:
SELECT * FROM users GROUP BY name;
Hay dos resultados posibles:
1 ali
2 john
O
2 john
3 ali
¡MYSQL no sabe qué resultado elegir! Porque hay diferentes id
s pero ambos tienen name=ali
.
Solución 1:
solo seleccionando el name
campo:
SELECT name FROM users GROUP BY name;
resultado:
ali
john
Esta es una solución perfecta. eliminando columnas que hacen GROUP BY
confundido. Esto significa que sabes lo que estás haciendo. Por lo general, no necesita
esas columnas, pero si las necesita, vaya a Solución3 !
Solución 2:
Desactivar only_full_group_by
. MYSQL elegirá uno de los dos resultados posibles ALEATORIAMENTE !! (Está bien si realmente no te importa qué id
elegirá, pero recuerda activarlo inmediatamente después de su consulta para evitar comportamientos inesperados en futuros groupBys)
Solución 3
Usa un Aggregate
función como MIN()
, MAX()
para ayudar a MYSQL a decidir qué debe elegir.
Por ejemplo:
SELECT MAX(id), name FROM users GROUP BY name;
resultado:
2 john
3 ali
Elegirá el ali
fila que tiene el máximo id
.