सकल FILTERPostgres में खंड 9.4+
चूंकि Postgres 9.4 एक साफ और तेज (SQL मानक) तरीका है:
SELECT count(*) FILTER (WHERE score BETWEEN 0 AND 3) AS low
, count(*) FILTER (WHERE score BETWEEN 4 AND 7) AS mid
, count(*) FILTER (WHERE score BETWEEN 8 AND 10) AS high
, count(*) AS total
FROM foo;
totalजोड़ता है low, midऔर high, जब तक कि NULL या अन्य मान शामिल न हों।
लिंक:
नीचे भी पढ़ें
पोस्टग्रेट्स 9.3-
तकनीक के एक जोड़े हैं:
@Phil ने एक CASEस्टेटमेंट के साथ मानक तरीका प्रदान किया (इसके अलावा sum(1), जो मानक तरीका नहीं है)। मुझे छोटे रूप का उपयोग करना पसंद है:
SELECT count(score BETWEEN 0 AND 3 OR NULL) AS low
, count(score BETWEEN 4 AND 6 OR NULL) AS mid
, count(score BETWEEN 7 AND 10 OR NULL) AS high
, count(*) AS total
FROM foo;
यदि आपके प्रश्न (केवल 0- 10संभव) में आपके मान निर्धारित हैं , तो और सरल करें:
SELECT count(score < 4 OR NULL) AS low
, count(score BETWEEN 4 AND 6 OR NULL) AS mid
, count(score > 6 OR NULL) AS high
, count(*) AS total
FROM foo;
थोड़ा छोटा, मुश्किल से तेज।
गंभीर अंतर
कर रहे हैं सूक्ष्म अंतर जब की तुलना sum()में फिल के जवाब :
सबसे महत्वपूर्ण बात, प्रति प्रलेखन :
यह ध्यान दिया जाना चाहिए कि इसके अलावा count, जब कोई पंक्तियों का चयन नहीं किया जाता है , तो ये फ़ंक्शन एक शून्य मान लौटाते हैं। विशेष रूप से, sumकोई भी पंक्तियां शून्य नहीं होतीं, शून्य नहीं जैसा कि कोई उम्मीद कर सकता है, ...
count(*) है मानक तरीका और थोड़ा तेजी से sum(1)। फिर से, शून्य बनाम 0 लागू होता है।
इन प्रश्नों में से (फिल सहित) के लिए शून्य मान गिना जाता है total। यदि यह वांछनीय नहीं है, तो इसके बजाय उपयोग करें:
count(score) AS total_not_null
Pg 9.3 में SQL फेल्ड ।
db <> यहाँ fg in pg 10