समस्या:
आप अपनी SQL क्वेरी में विभाजन करना चाहते हैं, लेकिन हर एक ऐसा व्यंजक है जो शून्य हो सकता है। जब हर वास्तव में शून्य होगा तो डेटाबेस आपको एक त्रुटि देगा।
उदाहरण:
हमारे डेटाबेस में investor_data
निम्नलिखित कॉलम में डेटा के साथ:id
, investor_year
, price_per_share
, income
, और expenses
।
id | निवेशक_वर्ष | price_per_share | <थ>आयखर्च | |
---|---|---|---|---|
1 | 2016 | 20 | 3200 | 2300 |
2 | 2017 | 130 | 2000 | 2000 |
3 | 2018 | 40 | 200 | 100 |
4 | 2019 | 15 | 5900 | 4900 |
आइए प्रत्येक वर्ष के लिए पी / ई अनुपात (मूल्य-आय अनुपात) निर्धारित करने के लिए प्रति शेयर मूल्य को आय और व्यय के बीच के अंतर से विभाजित करें। ध्यान दें कि ऐसे मामले हैं जब आय व्यय के बराबर होती है, इसलिए उनका अंतर शून्य होगा। इस प्रकार, हमें शून्य से विभाजन से बचने का तरीका खोजने की आवश्यकता है।
समाधान:
SELECT investor_year, price_per_share/NULLIF(income-expenses, 0) AS P_E_ratio FROM investor data;
समस्या विवरण में वर्णित अनुसार यह क्वेरी प्रत्येक वर्ष के लिए पी/ई अनुपात लौटाती है:
Investor_year | <थ>पी_ई_अनुपात|
---|---|
2016 | 0.0222 |
2017 | NULL |
2018 | 0.4000 |
2019 | 0.0150 |
यदि आय और व्यय के बीच का अंतर शून्य है (जैसा कि 2017 के मामले में है), NULLIF
फ़ंक्शन शून्य को NULL मान में बदल देता है। इसलिए, शून्य से भाग देने पर आपको परिणाम में NULL मिलता है।
चर्चा:
यदि आप शून्य से विभाजन को इनायत से संभालना चाहते हैं, तो आप NULLIF
. का उपयोग कर सकते हैं समारोह। NULLIF
दो तर्क लेता है:रुचि की अभिव्यक्ति, और वह मान जिसे आप ओवरराइड करना चाहते हैं। यदि पहला तर्क दूसरे के बराबर है, तो NULLIF
शून्य लौटाता है; अन्यथा, यह पहला तर्क देता है।
आप NULLIF
पर कॉल में हर को लपेटकर शून्य से संभावित विभाजन को संभालने के लिए इस फ़ंक्शन का उपयोग कर सकते हैं . हमारे उदाहरण में यदि आय और व्यय के बीच का अंतर शून्य है, तो यह मान NULL में बदल जाएगा, और भाग में हर शून्य होगा, शून्य नहीं।
समाधान 2:WHERE
बेशक, कुछ स्थितियों में, आप एक आसान समाधान का उपयोग कर सकते हैं:WHERE
का उपयोग करके बस शून्य से विभाजन से बचें तुलना ऑपरेटर <> के साथ। हमारे उदाहरण में, हम जांच सकते हैं कि आय-व्यय 0 से अलग है या नहीं। यदि ऐसा है, तो गणना वापस कर दी जाएगी।
SELECT investor_year, price_per_share/(income-expenses) AS P_E_ratio FROM investor data WHERE (income-expenses) <> 0 ;
ध्यान दें कि WHERE
. के साथ समाधान, आपको investor_date
टेबल। जिन पंक्तियों में आय और व्यय समान हैं, उन्हें अंतिम परिणाम में नहीं दिखाया जाएगा।