सकल FILTER
Postgres में खंड 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