Als user_id
is de PRIMAIRE SLEUTEL dan moet je PostgreSQL upgraden; nieuwere versies zullen het groeperen op de primaire sleutel correct afhandelen.
Als user_id
is niet uniek noch de primaire sleutel voor de betreffende 'estates'-relatie, dan heeft deze query niet veel zin, aangezien PostgreSQL op geen enkele manier kan weten welke waarde die moet worden geretourneerd voor elke kolom van estates
waar meerdere rijen dezelfde user_id
. delen . Je moet een verzamelfunctie gebruiken die uitdrukt wat je wilt, zoals min
, max
, avg
, string_agg
, array_agg
, etc of voeg de kolom(men) van belang toe aan de GROUP BY
.
Als alternatief kunt u de zoekopdracht herformuleren om DISTINCT ON
te gebruiken en een ORDER BY
als je echt een wat willekeurige rij wilt kiezen, hoewel ik echt betwijfel of het mogelijk is om dat via ActiveRecord uit te drukken.
Sommige databases - waaronder SQLite en MySQL - kiezen gewoon een willekeurige rij. Dit wordt door het PostgreSQL-team als onjuist en onveilig beschouwd, dus PostgreSQL volgt de SQL-standaard en beschouwt dergelijke zoekopdrachten als fouten.
Als je het volgende hebt:
col1 col2
fred 42
bob 9
fred 44
fred 99
en jij doet:
SELECT col1, col2 FROM mytable GROUP BY col1;
dan is het duidelijk dat je de rij moet krijgen:
bob 9
maar hoe zit het met het resultaat voor fred
? Er is niet één juist antwoord om te kiezen, dus de database zal weigeren om dergelijke onveilige zoekopdrachten uit te voeren. Als je de beste . wilt col2
voor elke col1
je zou de max
. gebruiken totaal:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;