2016-09-08 8 views
10

में आमतौर पर जब NULL किसी भी समीकरण में शामिल है तो पूरी परिणाम NULL (जैसे SELECT 2 + NULL + 5 रिटर्न NULL)समझौता योग (शून्य) MySQL

ही निम्नलिखित मामले के लिए रखती में हल करता है। Proposition #1

जब SUM एक स्तंभ तरह इकट्ठा करना प्रयोग किया जाता है और स्तंभ भी NULL मान हो सकते हैं क्या होता है?

proposition #1 के आधार पर आउटपुट का परिणाम NULL क्यों नहीं होता है।

CREATE TABLE t (age INT NULL); 

INSERT INTO t (age) VALUES (15),(20), (NULL), (30), (35); 

SELECT 
SUM(age) 
FROM t; 

आउटपुट:100

लेकिन मैं उम्मीद कर रहा था NULL

क्या MySQL चुपचाप इस मामले में उन नल मानों को छोड़ देता है?

http://sqlfiddle.com/#!9/3f99bb/2

+1

मूल्य 'NULL' वाला एक कॉलम मूल रूप से 'EMPTY' है, जिसका अर्थ है कि इसे एसयूएम की गणना में नहीं लिया गया है। बहुत सारे डेटाबेस स्कीमा खाली मूल्य के रूप में 'NULL' का उपयोग करते हैं। कल्पना करें कि वे अब अपने अन्य कॉलम के 'SUM' की गणना करने में सक्षम नहीं होंगे। – Xatenev

+0

@Xatenev तब उन्होंने इंगित किया, 'चयन 2 + न्यूल + 5' '7' होना चाहिए; – Jigar

+0

नहीं। यह 'NULL' @Jigar –

उत्तर

11

खैर यह manual

योग में विस्तार से बताया है ([DISTINCT] expr)
expr का योग देता है। यदि रिटर्न सेट में कोई पंक्ति नहीं है, तो SUM() NULL देता है। DISTINCT कीवर्ड का उपयोग केवल अलग-अलग मान expr के योग के लिए किया जा सकता है।

एसयूएम() कोई मेल नहीं होने पर शून्य पूर्ण हो जाता है।

इतना ही नहीं यह भी कहा गया है कि:

यह खंड बताता समूह (कुल) कार्यों कि मूल्यों की सेट पर कार्य करते हैं। जब तक अन्यथा कहा न जाए, समूह कार्य NULL मानों को अनदेखा करता है।

दूसरे शब्दों में SUM इस तरह व्यवहार करता है क्योंकि इस तरह से परिभाषित किया गया है।

select 2 + NULL + 5 

रिटर्न शून्य क्योंकि इस संदर्भ पर शून्य यह एक अज्ञात मूल्य का मतलब है, तो परिणाम शून्य हो जाएगा (अज्ञात:

+1

DISTINCT कीवर्ड का उपयोग केवल ** expr ** के विशिष्ट मानों को पूरा करने के लिए किया जा सकता है - क्या यह पंक्ति 'NULL' को बाहर करती है? मैं पोस्टिंग से पहले प्रलेखन के माध्यम से चला गया है और इस लाइन की ताकत को समझ में नहीं आया। 'NULL'' DISTINCT' में नहीं आता है? –

+0

जब आप इस संदर्भ में विशिष्ट उपयोग करते हैं, तो फिर आप गैर शून्य मानों की बात कर रहे हैं क्योंकि परिभाषा नल को यहां अनदेखा किया जाता है – e4c5

+1

उत्तर इस पंक्ति में निहित है ** यह खंड समूह (कुल) फ़ंक्शंस का वर्णन करता है जो मूल्यों के सेट पर संचालित होते हैं। जब तक अन्यथा कहा न जाए, समूह कार्य नल मानों को अनदेखा करते हैं **। :) याद किया कि :(। बहुत बहुत धन्यवाद। –

4

आप सही, कुल कार्य हैं गैर सकल कार्यों से एक अलग तरह से शून्य मान संभालती) भी।

यह 7 के बजाय वापस आ जाएगी:

select SUM(n) 
from (
    select 2 as n 
    union all select null 
    union all select 5 
) s 

क्योंकि इस संदर्भ में एक शून्य मूल्य पर, भले ही वह अज्ञात है, एक "निर्दिष्ट नहीं मान" के रूप में देखा जा सकता है।इसका कारण यह है कि एनयूएलएल को निर्दिष्ट मूल्य के रूप में उपयोग करना बहुत आम है और कुल कार्यों में एनयूएलएल को शामिल करने के लिए यह थोड़ा सा व्यावहारिक उपयोग है, यही कारण है कि कुल कार्यों को एनयूएलएल को अनदेखा करने के लिए परिभाषित किया गया है।

+0

बहुत धन्यवाद। 'कुल' और 'गैर समग्र' उदाहरणों को अलग करने का अच्छा तरीका। काश मैं दोनों उत्तरों को स्वीकार कर सकता हूं। वैसे भी , ऊपर की ओर –

संबंधित मुद्दे