Ако user_id
е ПЪРВИЧНИЯ КЛЮЧ след това трябва да надстроите PostgreSQL; по-новите версии ще обработват правилно групирането по първичен ключ.
Ако user_id
не е нито уникни първичния ключ за въпросната релация „имоти“, тогава тази заявка няма особен смисъл, тъй като PostgreSQL няма начин да разбере кои стойност, която да се върне за всяка колона от estates
където няколко реда споделят един и същ user_id
. Трябва да използвате агрегатна функция, която изразява това, което искате, като min
, max
, avg
, string_agg
, array_agg
, и т.н. или добавете колоната(ите) от интерес към GROUP BY
.
Като алтернатива можете да префразирате заявката, за да използвате DISTINCT ON
и ORDER BY
ако наистина искате да изберете донякъде произволен ред, макар че наистина се съмнявам, че е възможно да се изрази това чрез ActiveRecord.
Някои бази данни - включително SQLite и MySQL - просто ще изберат произволен ред. Това се счита за неправилно и опасно от екипа на PostgreSQL, така че PostgreSQL следва SQL стандарта и счита такива заявки за грешки.
Ако имате:
col1 col2
fred 42
bob 9
fred 44
fred 99
и вие правите:
SELECT col1, col2 FROM mytable GROUP BY col1;
тогава е очевидно, че трябва да получите реда:
bob 9
но какво да кажем за резултата за fred
? Няма единствен правилен отговор за избор, така че базата данни ще откаже да изпълни такива опасни заявки. Ако искате най-голямото col2
за произволен col1
бихте използвали max
съвкупност:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;