Wenn user_id
ist der PRIMÄRSCHLÜSSEL dann müssen Sie PostgreSQL aktualisieren; Neuere Versionen behandeln die Gruppierung nach dem Primärschlüssel korrekt.
Wenn user_id
ist weder noch eindeutig der Primärschlüssel für die fragliche Relation ‚Estates‘, dann macht diese Abfrage nicht viel Sinn, da PostgreSQL keine Möglichkeit hat zu wissen, welcher Wert, der für jede Spalte von estates
zurückgegeben werden soll wo mehrere Zeilen dieselbe user_id
teilen . Sie müssen eine Aggregatfunktion verwenden, die ausdrückt, was Sie wollen, wie min
, max
, avg
, string_agg
, array_agg
, usw. oder fügen Sie die gewünschte(n) Spalte(n) zu GROUP BY
hinzu .
Alternativ können Sie die Abfrage so umformulieren, dass sie DISTINCT ON
verwendet und ein ORDER BY
wenn Sie wirklich eine etwas willkürliche Zeile auswählen möchten, obwohl ich wirklich bezweifle, dass es möglich ist, dies über ActiveRecord auszudrücken.
Einige Datenbanken – einschließlich SQLite und MySQL – wählen einfach eine beliebige Zeile aus. Dies wird vom PostgreSQL-Team als falsch und unsicher angesehen, daher folgt PostgreSQL dem SQL-Standard und betrachtet solche Abfragen als Fehler.
Wenn Sie Folgendes haben:
col1 col2
fred 42
bob 9
fred 44
fred 99
und Sie tun:
SELECT col1, col2 FROM mytable GROUP BY col1;
dann ist es offensichtlich, dass Sie die Zeile erhalten sollten:
bob 9
aber was ist mit dem Ergebnis für fred
? Es gibt keine einzige richtige Antwort, daher weigert sich die Datenbank, solche unsicheren Abfragen auszuführen. Wenn Sie das Beste wollten col2
für jeden col1
Sie würden den max
verwenden aggregiert:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;