यह एक अच्छा प्रश्न है, और जिसका कोई अच्छा उत्तर नहीं है। NULL
. का उपचार आपके दो उदाहरणों में अलग है।
मूलभूत समस्या यह है कि NULL
साधन। आमतौर पर, इसका उपयोग गायब को दर्शाने के लिए किया जाता है मूल्य। हालांकि, एएनएसआई मानक में, यह एक अज्ञात . के लिए खड़ा है मूल्य। मुझे यकीन है कि दार्शनिक "लापता" और "अज्ञात" के बीच अंतर करने के लिए टॉम्स समर्पित कर सकते हैं।
एक साधारण अभिव्यक्ति (बूलियन या अंकगणित या किसी अन्य प्रकार के स्केलर) में, एएनएसआई लगभग सभी मामलों में "अज्ञात" के परिणाम को परिभाषित करता है जहां कोई भी ऑपरेंड "अज्ञात" होता है। कुछ अपवाद हैं:NULL AND FALSE
गलत है और NULL IS NULL
सच है, लेकिन ये दुर्लभ हैं।
एग्रीगेशन ऑपरेशंस के लिए, SUM()
के बारे में सोचें जैसे "सभी ज्ञात मानों का योग", और इसी तरह। SUM()
व्यवहार करता है NULL
+
. से अलग मान . लेकिन, यह व्यवहार भी मानक है, इसलिए सभी डेटाबेस इसी तरह काम करते हैं।
यदि आप एक NULL
चाहते हैं समेकन के लिए मान जब कोई भी इसके ऑपरेंड का NULL
है , तो आपको CASE
. का उपयोग करना होगा . मुझे लगता है कि एक कॉलम के लिए सबसे आसान तरीका है:
(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)