Om user_id
är PRIMÄRNYCKLEN då behöver du uppgradera PostgreSQL; nyare versioner kommer att hantera gruppering efter primärnyckeln korrekt.
Om user_id
är varken unik eller den primära nyckeln för "gods"-relationen i fråga, så är den här frågan inte så vettig, eftersom PostgreSQL inte har något sätt att veta vilken värde att returnera för varje kolumn i estates
där flera rader delar samma user_id
. Du måste använda en aggregatfunktion som uttrycker vad du vill ha, som min
, max
, avg
, string_agg
, array_agg
, etc eller lägg till kolumnen/kolumnerna av intresse i GROUP BY
.
Alternativt kan du formulera om frågan till att använda DISTINCT ON
och en ORDER BY
om du verkligen vill välja en något godtycklig rad, men jag tvivlar verkligen på att det är möjligt att uttrycka det via ActiveRecord.
Vissa databaser - inklusive SQLite och MySQL - väljer bara en godtycklig rad. Detta anses vara felaktigt och osäkert av PostgreSQL-teamet, så PostgreSQL följer SQL-standarden och anser att sådana frågor är fel.
Om du har:
col1 col2
fred 42
bob 9
fred 44
fred 99
och du gör:
SELECT col1, col2 FROM mytable GROUP BY col1;
då är det självklart att du ska få raden:
bob 9
men hur är resultatet för fred
? Det finns inget rätt svar att välja, så databasen kommer att vägra utföra sådana osäkra frågor. Om du ville ha det bästa col2
för någon col1
du skulle använda max
sammanlagd:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;