Este es un error común para los usuarios de MySQL. En MySQL 5.7, de forma predeterminada, la base de datos aplica la semántica estándar que la mayoría de las demás bases de datos SQL han aplicado durante años.
La regla es que cada columna en su lista de selección debe ser una de:
- Nombrado en la cláusula GROUP BY; es decir, es lo que estás agrupando.
- Dentro de una función agregada como MIN, MAX(), SUM(), GROUP_CONCAT(), etc.
- Depende funcionalmente de la columna por la que está agrupando (esta es la extensión de MySQL para el comportamiento estándar de SQL y otras bases de datos SQL no necesariamente lo admiten).
En su consulta (expandiré su SELECT *
):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
Está agrupando por característica_clave, pero esto significa que las otras columnas no cumplen con las reglas que describí anteriormente.
He aquí una forma de solucionarlo:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
Puede parecer redundante usar MAX(user_id)
ya que solo hay un valor posible basado en la condición de la cláusula WHERE. Pero tampoco hay daño. MIN(user_id)
también funcionaría.
Vea también mis respuestas anteriores sobre este mismo error: