Este é um erro comum para usuários do MySQL. No MySQL 5.7, por padrão, o banco de dados impõe a semântica padrão que a maioria dos outros bancos de dados SQL impõe há anos.
A regra é que cada coluna da sua lista de seleção deve ser uma das seguintes:
- Nomeado na cláusula GROUP BY; ou seja, é o que você está agrupando.
- Dentro de uma função agregada como MIN, MAX(), SUM(), GROUP_CONCAT(), etc.
- Funcionalmente dependente da coluna pela qual você está agrupando (esta é a extensão do MySQL para o comportamento SQL padrão, e outros bancos de dados SQL não suportam necessariamente isso).
Na sua consulta (vou expandir seu
SELECT *
):select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
Você está agrupando por feature_key, mas isso significa que as outras colunas não estão em conformidade com as regras que descrevi acima.
Aqui está uma maneira de corrigi-lo:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
Pode parecer redundante usar
MAX(user_id)
uma vez que existe apenas um valor possível com base na condição da cláusula WHERE. Mas também não há mal nenhum. MIN(user_id)
também funcionaria. Veja também minhas respostas anteriores sobre este mesmo erro: