PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

बूलियन कॉलम पर SQLAlchemy func.count

HAVING . में समग्र फ़ंक्शन का उपयोग करना खंड बहुत अधिक कानूनी है, क्योंकि HAVING समूह पंक्तियों को हटा देता है। सशर्त गणना या तो उस संपत्ति का उपयोग करके प्राप्त की जा सकती है जो NULL . है गिनती नहीं है:

<ब्लॉकक्वॉट>

count(expression) ... इनपुट पंक्तियों की संख्या जिसके लिए व्यंजक का मान शून्य नहीं है

या अगर PostgreSQL 9.4 या बाद के संस्करण का उपयोग कर रहे हैं, तो कुल FILTER . के साथ खंड:

count(*) FILTER (WHERE something > 0)

आप योग के योग (और शून्य) का भी उपयोग कर सकते हैं।

PostgreSQL>=9.4 और SQLAlchemy>=1.0.0

फ़िल्टर किए गए समग्र फ़ंक्शन का उपयोग करना:

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

पुराना PostgreSQL और/या SQLAlchemy

"if" के लिए SQL एनालॉग या तो CASE . है अभिव्यक्ति या इस मामले में nullif() समारोह। इन दोनों का उपयोग इस तथ्य के साथ किया जा सकता है कि NULL गिनती नहीं है:

from sqlalchemy import case

...

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

या:

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

nullif() का उपयोग करना थोड़ा भ्रमित करने वाला हो सकता है क्योंकि "हालत" वही है जो आप नहीं करते हैं गिनना चाहते हैं। आप एक ऐसी अभिव्यक्ति बना सकते हैं जो स्थिति को और अधिक प्राकृतिक बना दे, लेकिन यह पाठक के लिए छोड़ दिया गया है। ये 2 अधिक पोर्टेबल समाधान हैं, लेकिन दूसरी ओर FILTER खंड मानक है, हालांकि व्यापक रूप से उपलब्ध नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. repmgr 2.0 की घोषणा

  2. अजगर पाइप स्थापित psycopg2 त्रुटि स्थापित करें

  3. एक ही क्वेरी में एकाधिक array_agg () कॉल

  4. .sql फ़ाइल पोस्टग्रेज में स्क्रीन पर प्रिंट करना

  5. मैं PostgreSQL ट्रिगर से ईमेल कैसे भेज सकता हूं?