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

GroupingError:ERROR:kolom harus muncul di klausa GROUP BY atau digunakan dalam fungsi agregat

Anda tidak dapat menggabungkan SELECT * dengan GROUP BY some_column di Postgres (kecuali some_column adalah PK), karena itu kontradiksi. Semua kolom non-agregat (digunakan di SELECT , HAVING atau ORDER BY klausa di luar fungsi agregat) harus dalam GROUP BY list - di mana kolom kunci utama dapat menggantikan semua kolom tabel. Jika tidak, tidak ditentukan yang nilai untuk dipilih dari kumpulan agregat.

Per dokumentasi:

Ketika GROUP BY ada, atau ada fungsi agregat apa pun, itu tidak valid untuk SELECT daftar ekspresi untuk merujuk ke kolom yang tidak dikelompokkan kecuali dalam fungsi agregat atau ketika kolom yang tidak dikelompokkan secara fungsional bergantung pada kolom yang dikelompokkan, karena jika tidak, akan ada lebih dari satu nilai yang mungkin untuk dikembalikan untuk kolom yang tidak dikelompokkan. Ketergantungan fungsional ada jika kolom yang dikelompokkan (atau bagiannya) adalah kunci utama dari tabel yang berisi kolom yang tidak dikelompokkan.

RDBMS tertentu lainnya diketahui memainkan trik kotor di sini dan mengizinkan ini dan memilih nilai arbitrer...

Anda sepertinya menginginkan daftar pasien unik yang telah berkomentar, dengan terbaru komentar masing-masing. Cara paling sederhana di Postgres adalah dengan DISTINCT ON :

SELECT DISTINCT ON (patient_id) *
FROM   comments
WHERE  clinician_id = $1
ORDER  BY patient_id, created_at DESC NULLS LAST;

Tapi ini tidak akan berhasil dengan SQLite - yang seharusnya tidak ada dalam lingkaran untuk memulai:

  • Solusi Ruby generik untuk SQLite3 "LIKE" atau PostgreSQL "ILIKE"?

NULLS LAST hanya relevan jika created_at bisa NULL:

  • Urutkan PostgreSQL berdasarkan datetime asc, null dulu?

Detail untuk DISTINCT ON :

  • Pilih baris pertama di setiap grup GROUP BY?



  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 Mengatur Koneksi Jarak Jauh ke PostgreSQL

  2. Mengapa PostgreSQL tidak mengembalikan nilai nol ketika kondisinya <> true

  3. Bagaimana cara menghitung rata-rata pergerakan eksponensial pada postgres?

  4. Django JSONField di dalam ArrayField

  5. Django+Postgres:transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi