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

Redshift/Postgres में, किसी शर्त को पूरा करने वाली पंक्तियों की गणना कैसे करें?

सबसे पहले, आपके यहां जो समस्या हो रही है वह यह है कि आप जो कह रहे हैं वह यह है कि "यदि ग्रेड 70 से कम है, तो इस केस एक्सप्रेशन का मान गिनती (रैंक) है। अन्यथा, इस अभिव्यक्ति का मान गिनती (रैंक) है। ।" तो, किसी भी मामले में, आपको हमेशा एक ही मान मिलता है।

SELECT 
    CASE
        WHEN grade < 70 THEN COUNT(rank)
        ELSE COUNT(rank)
    END
FROM
   grades

गिनती() केवल गैर-शून्य मानों की गणना करता है, इसलिए आम तौर पर आप जो पैटर्न देख रहे हैं उसे पूरा करने के लिए आप जो पैटर्न देखेंगे वह यह है:

SELECT 
    count(CASE WHEN grade < 70 THEN 1 END) as grade_less_than_70,
    count(CASE WHEN grade >= 70 and grade < 80 THEN 1 END) as grade_between_70_and_80
FROM
   grades

इस तरह केस एक्सप्रेशन केवल 1 का मूल्यांकन करेगा जब परीक्षण अभिव्यक्ति सत्य होगी और अन्यथा शून्य होगी। फिर गिनती() केवल गैर-शून्य उदाहरणों की गणना करेगी, यानी जब परीक्षण अभिव्यक्ति सत्य है, जो आपको वह चाहिए जो आपको चाहिए।

संपादित करें:एक साइड नोट के रूप में, ध्यान दें कि यह बिल्कुल वैसा ही है जैसा आपने मूल रूप से count(if(test, true-value, false-value)) का उपयोग करके लिखा था। , केवल count(case when test then true-value end) (और शून्य एक else . के बाद से झूठे मूल्य में स्टैंड है मामले में आपूर्ति नहीं की गई थी)।

संपादित करें:इस मूल एक्सचेंज के कुछ महीनों बाद पोस्टग्रेज 9.4 जारी किया गया था। उस संस्करण ने कुल फ़िल्टर पेश किए, जो इस तरह के परिदृश्यों को थोड़ा अच्छा और स्पष्ट बना सकते हैं। यह उत्तर अभी भी कुछ सामयिक उत्थान प्राप्त करता है, इसलिए यदि आप यहां पर ठोकर खा चुके हैं और एक नए पोस्टग्रेज (यानी 9.4+) का उपयोग कर रहे हैं तो आप इस समकक्ष संस्करण पर विचार करना चाहेंगे:

SELECT
    count(*) filter (where grade < 70) as grade_less_than_70,
    count(*) filter (where grade >= 70 and grade < 80) as grade_between_70_and_80
FROM
   grades


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL13 में अपग्रेड करना

  2. PostgreSQL में क्वेरी ऑप्टिमाइज़ेशन। मूल बातें समझाएं - भाग 3

  3. COUNT कुल में शून्य / 0 परिणाम कैसे शामिल करें?

  4. एक स्ट्रिंग की जांच करने के लिए पोस्टग्रेज क्वेरी एक संख्या है

  5. आदेश द्वारा ... PostgreSQL में क्लॉज का उपयोग करना