Postgres 9.4 या बाद के संस्करण में, समग्र FILTER
. का उपयोग करें विकल्प। आमतौर पर सबसे साफ और सबसे तेज:
SELECT category
, count(*) FILTER (WHERE question1 = 0) AS zero
, count(*) FILTER (WHERE question1 = 1) AS one
, count(*) FILTER (WHERE question1 = 2) AS two
FROM reviews
GROUP BY 1;
FILTER
. के लिए विवरण खंड:
- अतिरिक्त (विशिष्ट) फ़िल्टर वाले कुल कॉलम
यदि आप इसे संक्षिप्त चाहते हैं :
SELECT category
, count(question1 = 0 OR NULL) AS zero
, count(question1 = 1 OR NULL) AS one
, count(question1 = 2 OR NULL) AS two
FROM reviews
GROUP BY 1;
अधिक सिंटैक्स वेरिएंट:
- पूर्ण प्रदर्शन के लिए, SUM तेज़ है या COUNT?
उचित क्रॉसस्टैब क्वेरी
crosstab()
सबसे अच्छा प्रदर्शन देता है और विकल्पों की लंबी सूची के लिए छोटा है:
SELECT * FROM crosstab(
'SELECT category, question1, count(*) AS ct
FROM reviews
GROUP BY 1, 2
ORDER BY 1, 2'
, 'VALUES (0), (1), (2)'
) AS ct (category text, zero int, one int, two int);
विस्तृत विवरण:
- PostgreSQL क्रॉसस्टैब क्वेरी