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

Saya memiliki hasil yang berbeda dari kueri untuk COUNT('e.id') atau COUNT(e.id)

'e.id' adalah konstanta string, jadi COUNT('e.id') hanyalah cara yang canggung dan menyesatkan untuk mengatakan COUNT(*) .

COUNT(e.id) , di sisi lain, menghitung semua baris dalam hasil di mana e.id IS NOT NULL - sejak count() tidak menghitung nilai NULL.

Panduan tentang count() :

Seperti yang Anda lihat, bahkan ada dua fungsi terpisah secara internal. Dan perlu diperhatikan bahwa count(*) sedikit lebih cepat. Jadi gunakan itu kecuali Anda butuh varian kedua. Terkait:

Anda mungkin membalas dengan:
"Tapi e.id adalah PRIMARY KEY dari core_employments , jadi didefinisikan NOT NULL !"

Tapi itu akan mengabaikan bersyarat LEFT JOIN dalam kueri Anda yang masih memperkenalkan NULL nilai dalam NOT NULL . Anda kolom, di mana kondisi bergabung tidak terpenuhi. Terkait:

Artinya, LEFT [OUTER] JOIN menyesatkan juga. Kondisi selanjutnya

having("COUNT(e.id) = 1")

memaksanya untuk bertindak seperti [INNER] JOIN biasa . Setelah Anda memperbaikinya, Anda dapat menyederhanakannya menjadi:

having("COUNT(*) = 1")

Dan jika Anda hanya peduli setidaknya satu baris terkait ada di core_employments , menerjemahkan ke having("COUNT(*) >= 1") , teknik superior (lebih jelas, lebih cepat) dalam kasus sederhana adalah EXISTS setengah bergabung :

WHERE EXISTS (SELECT FROM core_employments WHERE <conditions>)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara terbaik untuk menyalin subset baris tabel dari satu database ke database lain di Postgres?

  2. Kolom kesalahan c.CreatedOn tidak ada... di log PostgreSQL selama inisialisasi konteks pertama kode menggunakan penyedia Devart dotConnect

  3. Apa yang dimaksud dengan batasan pengecualian `KECUALIKAN MENGGUNAKAN Gist (c WITH &&)`?

  4. Cara menggunakan kursor sisi server dengan psycopg2

  5. Kelas tidak ditemukan memuat JDBC org.postgresql.Driver