Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL में ज़ीरो द्वारा डिवाइड को कैसे हैंडल करें

समस्या:

आप अपनी 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 टेबल। जिन पंक्तियों में आय और व्यय समान हैं, उन्हें अंतिम परिणाम में नहीं दिखाया जाएगा।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TimescaleDB के लिए स्ट्रीमिंग प्रतिकृति का अवलोकन

  2. जावा से सेल्सफोर्स SOQL

  3. संदर्भ डेटा पैटर्न:एक्स्टेंसिबल और फ्लेक्सिबल

  4. 2008 R2 बग फिक्स जो RCSI को तोड़ता है

  5. अपाचे स्पार्क के साथ प्रज्वलित हो जाओ - भाग 1