PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL -harus muncul di klausa GROUP BY atau digunakan dalam fungsi agregat

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Untuk pemula, apakah ada banyak perbedaan antara MySQL dan PostgreSQL?

  2. Kunci utama dengan Apache Spark

  3. Berhenti (lama) menjalankan kueri SQL di PostgreSQL saat sesi atau permintaan tidak ada lagi?

  4. Bagaimana cara mengikat variabel SQL di PHP?

  5. Dapatkan ukuran objek besar dalam kueri PostgreSQL?