sql >> Databáze >  >> RDS >> Mysql

Jak opravit skupinu dotazů pomocí only_full_group_by

Toto je běžná chyba pro uživatele MySQL. V MySQL 5.7 ve výchozím nastavení databáze vynucuje standardní sémantiku, kterou většina ostatních SQL databází prosazuje již léta.

Pravidlem je, že každý sloupec ve vašem výběrovém seznamu musí být jedním z:

  • Pojmenováno v klauzuli GROUP BY; tj. je to to, co seskupujete.
  • Uvnitř agregační funkce jako MIN, MAX(), SUM(), GROUP_CONCAT() atd.
  • Funkčně závislé na sloupci, podle kterého seskupujete (toto je rozšíření MySQL ke standardnímu chování SQL a ostatní databáze SQL to nezbytně nepodporují).

Ve vašem dotazu (rozšířím váš SELECT * ):

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

Seskupujete se podle feature_key, ale to znamená, že ostatní sloupce nesplňují pravidla, která jsem popsal výše.

Zde je způsob, jak to opravit:

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

Může se zdát nadbytečné použít MAX(user_id) protože existuje pouze jedna možná hodnota na základě podmínky klauzule WHERE. Ale ani to není na škodu. MIN(user_id) by také fungovalo.

Viz také mé minulé odpovědi na stejnou chybu:




  1. Upozornění:mysqli_connect():(HY000/2002):Žádný takový soubor nebo adresář

  2. mysql - VLOŽTE rozsah dat do sloupců dat, POKUD se data nepřekrývají s existujícími

  3. Jak nainstaluji pouze klientské nástroje pro PostgreSQL na Windows?

  4. SQL Server CTE a příklad rekurze