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

SQLAlchemy func.count pada kolom boolean

Menggunakan fungsi agregat dalam HAVING klausa sangat legal, karena HAVING menghilangkan baris grup. Penghitungan bersyarat dapat dicapai baik dengan menggunakan properti yang NULL s tidak dihitung:

count(expression) ... jumlah baris input yang nilai ekspresinya bukan null

atau jika menggunakan PostgreSQL 9.4 atau lebih baru, dengan agregat FILTER klausa:

count(*) FILTER (WHERE something > 0)

Anda juga dapat menggunakan jumlah satu (dan nol).

PostgreSQL>=9.4 dan SQLAlchemy>=1.0.0

Menggunakan fungsi agregat yang difilter:

.having(func.count(1).filter(Question.accepted) >
        func.count(1).filter(not_(Question.accepted)))

PostgreSQL dan/atau SQLAlchemy yang lebih lama

Analog SQL untuk "jika" adalah CASE ekspresi atau dalam hal ini nullif() fungsi. Keduanya dapat digunakan bersama dengan fakta bahwa NULL s tidak dihitung:

from sqlalchemy import case

...

.having(func.count(case([(Question.accepted, 1)])) >
        func.count(case([(not_(Question.accepted), 1)])))

atau:

.having(func.count(func.nullif(Question.accepted, False)) >
        func.count(func.nullif(Question.accepted, True)))

Menggunakan nullif() bisa sedikit membingungkan karena "kondisi" adalah yang tidak ingin menghitung. Anda dapat memasang ekspresi yang akan membuat kondisi lebih alami, tetapi itu diserahkan kepada pembaca. 2 ini adalah solusi yang lebih portabel, tetapi di sisi lain FILTER klausa adalah standar, meskipun tidak tersedia secara luas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hubungkan Aplikasi iPhone ke PostgreSQL Menggunakan Libpq

  2. Gambaran Umum Parameter Koneksi PostgreSQL 13 libpq sslpassword

  3. Mendapatkan kunci utama yang tidak diketahui untuk tabel saat ID ada di sana

  4. Batasan pemeriksaan PostgreSQL untuk kondisi kunci asing

  5. PostgreSQL ERROR:membatalkan pernyataan karena konflik dengan pemulihan