sql >> Database >  >> RDS >> Mysql

Querygroep repareren met only_full_group_by

Dit is een veelvoorkomende fout voor MySQL-gebruikers. In MySQL 5.7 dwingt de database standaard de standaardsemantiek af die de meeste andere SQL-databases al jaren afdwingen.

De regel is dat elke kolom in uw selectielijst een van de volgende moet zijn:

  • Genoemd in de GROUP BY-clausule; d.w.z. het is wat je groepeert.
  • Binnen een aggregatiefunctie zoals MIN, MAX(), SUM(), GROUP_CONCAT(), etc.
  • Functioneel afhankelijk van de kolom waarop u groepeert (dit is de uitbreiding van MySQL op standaard SQL-gedrag, en andere SQL-databases ondersteunen dit niet noodzakelijkerwijs).

In uw zoekopdracht (ik zal uw SELECT * uitbreiden ):

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

Je groepeert op feature_key, maar dit betekent dat de andere kolommen niet voldoen aan de regels die ik hierboven heb beschreven.

Hier is een manier om het op te lossen:

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

Het lijkt misschien overbodig om MAX(user_id) . te gebruiken omdat er slechts één waarde mogelijk is op basis van de voorwaarde van de WHERE-clausule. Maar het kan ook geen kwaad. MIN(user_id) zou ook werken.

Zie ook mijn eerdere antwoorden over dezelfde fout:




  1. KIES * UIT meerdere tabellen. MySQL

  2. Null Pointer-uitzondering bij het aanroepen van getReadableDatabase()

  3. MSSQL record datum/tijd automatisch verwijderen

  4. MySQL-gegevensbron verschijnt niet in Visual Studio