Mysql
 sql >> Database >  >> RDS >> Mysql

Come correggere il gruppo di query con only_full_group_by

Questo è un errore comune per gli utenti MySQL. In MySQL 5.7, per impostazione predefinita, il database applica la semantica standard che la maggior parte degli altri database SQL applica da anni.

La regola è che ogni colonna nell'elenco di selezione deve essere una di:

  • Nominato nella clausola GROUP BY; cioè è ciò che stai raggruppando.
  • All'interno di una funzione aggregata come MIN, MAX(), SUM(), GROUP_CONCAT(), ecc.
  • Funzionalmente dipendente dalla colonna in base alla quale stai raggruppando (questa è l'estensione di MySQL al comportamento SQL standard e altri database SQL non lo supportano necessariamente).

Nella tua richiesta (amplierò il tuo SELECT * ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

Stai raggruppando per feature_key, ma questo significa che le altre colonne non rispettano le regole che ho descritto sopra.

Ecco un modo per risolverlo:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

Potrebbe sembrare ridondante usare MAX(user_id) poiché è possibile un solo valore in base alla condizione della clausola WHERE. Ma non c'è neanche male. MIN(user_id) funzionerebbe anche.

Vedi anche le mie risposte passate su questo stesso errore: