Hvis user_id
er den PRIMÆRE NØGLE så skal du opgradere PostgreSQL; nyere versioner vil korrekt håndtere gruppering efter den primære nøgle.
Hvis user_id
er hverken unik eller den primære nøgle for den pågældende 'gods'-relation, så giver denne forespørgsel ikke meget mening, da PostgreSQL ikke har nogen måde at vide hvilken værdi, der skal returneres for hver kolonne af estates
hvor flere rækker deler det samme user_id
. Du skal bruge en aggregeret funktion, der udtrykker det, du ønsker, f.eks. min
, max
, avg
, string_agg
, array_agg
, osv., eller tilføj kolonnen(r) af interesse til GROUP BY
.
Alternativt kan du omformulere forespørgslen til at bruge DISTINCT ON
og en ORDER BY
hvis du virkelig ønsker at vælge en noget vilkårlig række, selvom jeg virkelig tvivler på, at det er muligt at udtrykke det via ActiveRecord.
Nogle databaser - inklusive SQLite og MySQL - vil bare vælge en vilkårlig række. Dette anses for forkert og usikkert af PostgreSQL-teamet, så PostgreSQL følger SQL-standarden og betragter sådanne forespørgsler som fejl.
Hvis du har:
col1 col2
fred 42
bob 9
fred 44
fred 99
og du gør:
SELECT col1, col2 FROM mytable GROUP BY col1;
så er det oplagt, at du skal få rækken:
bob 9
men hvad med resultatet for fred
? Der er ikke et enkelt korrekt svar at vælge, så databasen vil nægte at udføre sådanne usikre forespørgsler. Hvis du ville have det bedste col2
for enhver col1
du skal bruge max
samlet:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;