sql >> Databasteknik >  >> RDS >> Mysql

Hur man fixar frågegrupp med only_full_group_by

Detta är ett vanligt fel för MySQL-användare. I MySQL 5.7 tillämpar databasen som standard standardsemantiken som de flesta andra SQL-databaser har tillämpat i flera år.

Regeln är att varje kolumn i din vallista måste vara en av:

  • Benämns i GROUP BY-satsen; dvs det är vad du grupperar vara.
  • Inuti en aggregerad funktion som MIN, MAX(), SUM(), GROUP_CONCAT() osv.
  • Funktionellt beroende av kolumnen du grupperar efter (detta är MySQL:s tillägg till standard SQL-beteende, och andra SQL-databaser stöder inte nödvändigtvis detta).

I din fråga (jag utökar din SELECT * ):

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

Du grupperar efter feature_key, men det betyder att de andra kolumnerna inte följer reglerna jag beskrev ovan.

Här är ett sätt att fixa det:

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

Det kan tyckas överflödigt att använda MAX(user_id) eftersom det bara finns ett värde möjligt baserat på WHERE-satsvillkoret. Men det är ingen skada heller. MIN(user_id) skulle också fungera.

Se även mina tidigare svar på samma fel:




  1. Sammansatt primärnyckel i django

  2. Lås Oracle-databasen innan du kör skripten Delete/Load data

  3. Hur beställer man efter max två kolumner som kan vara null i MySQL?

  4. Varför är SELECT utan kolumner giltigt