क्या ELSE 0 को मेरे COUNT CASE में देखा गया है?


10

बीच क्या अंतर है COUNT(CASE WHEN [Column A] = ____ THEN 1 END और COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

मैं पूर्व का उपयोग कर रहा हूं और मैंने अभी तक अंतर नहीं देखा है; जोड़ने का कारण क्या है ELSE 0- क्या ऐसी स्थितियां हैं जहां SQL सर्वर गलत तरीके से गिना जाएगा?


4
दूसरा उदाहरण सही होने के लिए COUNT के बजाय SUM का उपयोग करना चाहिए।
ओलिवियर जैकोट-डेसकोम्बर्स

जवाबों:


23

बस पहले मामले में आप 1s और NULLs की गिनती कर रहे हैं। (यदि सीएएसई स्टेटमेंट मैच में कोई भी स्थिति नहीं है और कोई ईएलएसई क्लॉज नहीं है, तो NULL को लौटा दिया गया है।) NULLs की गणना नहीं की गई है। दूसरे मामले में 1 का और 0 का। 0 की गिनती की जा सकती है।

त्वरित उदाहरण:

CREATE TABLE #CountMe (Col1 char(1));

INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');

SELECT
    COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;

आउटपुट:

यहाँ छवि विवरण दर्ज करें


9

यदि आप केस स्टेटमेंट के लिए दूसरे भाग को निर्दिष्ट नहीं कर रहे हैं, तो यह NULL डिफ़ॉल्ट रूप से वापस आ जाएगा, और आपके मामले में यह एक अच्छी बात है, क्योंकि गिनती गैर-NULL मानों की गणना करेगी। यदि आप मामले से कुछ और वापस करते हैं, तो यह कोई फर्क नहीं पड़ता कि यह 1, 0 या 2 है, इसे हमेशा 1 के रूप में गिना जाएगा।

यदि आप गणना के बजाय राशि का उपयोग करेंगे, तो आपको 1 या 0 वापस करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.