Jika user_id
adalah KUNCI UTAMA maka Anda perlu memutakhirkan PostgreSQL; versi yang lebih baru akan menangani pengelompokan dengan kunci utama dengan benar.
Jika user_id
tidak unik atau kunci utama untuk relasi 'perkebunan' yang dimaksud, maka kueri ini tidak masuk akal, karena PostgreSQL tidak memiliki cara untuk mengetahui yang nilai yang akan dikembalikan untuk setiap kolom estates
di mana beberapa baris berbagi user_id
yang sama . Anda harus menggunakan fungsi agregat yang mengekspresikan apa yang Anda inginkan, seperti min
, max
, avg
, string_agg
, array_agg
, dll atau tambahkan kolom yang diinginkan ke GROUP BY
.
Sebagai alternatif, Anda dapat menyusun ulang kueri untuk menggunakan DISTINCT ON
dan ORDER BY
jika Anda benar-benar ingin memilih baris yang agak sewenang-wenang, meskipun saya sangat ragu apakah mungkin untuk mengungkapkannya melalui ActiveRecord.
Beberapa database - termasuk SQLite dan MySQL - hanya akan memilih baris arbitrer. Ini dianggap salah dan tidak aman oleh tim PostgreSQL, jadi PostgreSQL mengikuti standar SQL dan menganggap kueri tersebut sebagai kesalahan.
Jika Anda memiliki:
col1 col2
fred 42
bob 9
fred 44
fred 99
dan Anda melakukannya:
SELECT col1, col2 FROM mytable GROUP BY col1;
maka jelas bahwa Anda harus mendapatkan baris:
bob 9
tapi bagaimana dengan hasil untuk fred
? Tidak ada satu pun jawaban yang benar untuk dipilih, sehingga database akan menolak untuk mengeksekusi kueri yang tidak aman tersebut. Jika Anda menginginkan yang terhebat col2
untuk col1
any Anda akan menggunakan max
agregat:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;