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

PGError:ERROR:agregat tidak diizinkan dalam klausa WHERE pada kueri AR dari suatu objek dan objek has_many-nya

Pesan kesalahan memberitahu Anda:

agregat tidak diperbolehkan dalam klausa WHERE

count() adalah fungsi agregat. Gunakan klausa HAVING untuk itu.
Kueri dapat terlihat seperti ini:

SELECT r.*
FROM   recommendations r
JOIN   approvals       a ON a.recommendation_id = r.id
WHERE  r.user_id = $current_user_id
GROUP  BY r.id
HAVING count(a.recommendation_id) = 1

Dengan PostgreSQL 9.1 atau yang lebih baru, cukup untuk GROUP BY kunci utama tabel (dengan asumsi recommendations.id adalah PKnya). Dalam versi Postgres sebelum 9.1 Anda harus memasukkan semua kolom SELECT daftar yang tidak digabungkan dalam GROUP BY daftar. Dengan recommendations.* di SELECT list, itu akan menjadi setiap kolom tabel.

Saya mengutip catatan rilis PostgreSQL 9.1:

Izinkan non-GROUP BY kolom dalam daftar target kueri saat kunci utama ditentukan di GROUP BY klausa (Peter Eisentraut)

Sederhana dengan sub-pilihan

Either way, ini lebih sederhana dan lebih cepat, melakukan hal yang sama:

SELECT *
FROM   recommendations r
WHERE  user_id = $current_user_id
AND   (SELECT count(*)
       FROM   approvals
       WHERE  recommendation_id = r.id) = 1;

Hindari mengalikan baris dengan JOIN apriori, maka Anda tidak perlu menggabungkannya kembali.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mendapatkan Waktu Saat Ini di PostgreSQL

  2. Nilai SSLMode Postgres memerlukan Tidak Valid Saat Dukungan SSL Tidak Dikompilasi Menggunakan Pembungkus Data Asing

  3. Performa TPC-H sejak PostgreSQL 8.3

  4. docker postgres dengan data awal tidak bertahan selama komit

  5. Kesalahan dalam evolusi di Heroku