Pokud user_id
je PRIMÁRNÍ KLÍČ pak musíte upgradovat PostgreSQL; novější verze budou správně zpracovávat seskupování podle primárního klíče.
Pokud user_id
není ani unikátní ani primární klíč pro daný vztah 'statky', pak tento dotaz nedává moc smysl, protože PostgreSQL nemá způsob, jak zjistit, který hodnotu, která se vrátí pro každý sloupec estates
kde několik řádků sdílí stejné user_id
. Musíte použít agregační funkci, která vyjadřuje, co chcete, například min
, max
, avg
, string_agg
, array_agg
, atd. nebo přidejte požadovaný sloupec do GROUP BY
.
Případně můžete dotaz přeformulovat tak, aby použil DISTINCT ON
a ORDER BY
pokud opravdu chcete vybrat poněkud libovolný řádek, i když opravdu pochybuji, že je možné to vyjádřit pomocí ActiveRecord.
Některé databáze – včetně SQLite a MySQL – vyberou pouze libovolný řádek. Tým PostgreSQL to považuje za nesprávné a nebezpečné, takže PostgreSQL se řídí standardem SQL a považuje takové dotazy za chyby.
Pokud máte:
col1 col2
fred 42
bob 9
fred 44
fred 99
a vy:
SELECT col1, col2 FROM mytable GROUP BY col1;
pak je zřejmé, že byste měli dostat řádek:
bob 9
ale co výsledek pro fred
? Neexistuje žádná jediná správná odpověď k výběru, takže databáze odmítne provést takové nebezpečné dotazy. Pokud jste chtěli největší col2
pro jakýkoli col1
použijete max
agregát:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;