Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como corrigir o grupo de consulta com only_full_group_by


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: