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

उत्पाद () कुल कार्य

लघुगणक/शक्ति दृष्टिकोण आमतौर पर इस्तेमाल किया जाने वाला दृष्टिकोण है। Oracle के लिए, वह है:

select exp(sum(ln(col)))
from table;

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

वैसे, यह फ़ंक्शन अधिकांश डेटाबेस से गायब है, यहां तक ​​कि वे भी जो बहुत सारे सांख्यिकीय एकत्रीकरण कार्यों को लागू करते हैं।

संपादित करें:

ओह, ऋणात्मक संख्याओं की समस्या इसे थोड़ा और जटिल बनाती है:

select ((case when mod(sum(sign(col)), 2) = 0 then 1 else -1 end) *
        exp(sum(ln(abs(col))))
       ) as product

मैं Oracle में 0 . को संभालने के सुरक्षित तरीके के बारे में सुनिश्चित नहीं हूं एस। यह एक "तार्किक" दृष्टिकोण है:

select (case when sum(case when col = 0 then 1 else 0 end) > 0
             then NULL
             when mod(sum(sign(col)), 2) = 0
             then exp(sum(ln(abs(col)))
             else - exp(sum(ln(abs(col)))
        end) 
       ) as product

समस्या यह है कि डेटाबेस इंजन case . को निष्पादित करने से पहले लॉग पर त्रुटि प्राप्त कर सकता है बयान। ऐसा होता है कि SQL सर्वर कैसे काम करता है। मैं Oracle के बारे में निश्चित नहीं हूं।

आह, यह काम कर सकता है:

select (case when sum(case when col = 0 then 1 else 0 end) > 0
             then NULL
             when mod(sum(sign(col)), 2) = 0
             then exp(sum(ln(case when col <> 0 then abs(col) end)))
             else - exp(sum(ln(case when col <> 0 then abs(col) end)))
        end) 
       ) as product

यह NULL returns लौटाता है जब कोई 0 हो ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TOAD लिपियों में चर

  2. क्या MAX_UTILIZATION PROCESSES के कारण प्रबंधित कनेक्शन अपवाद प्राप्त करने में असमर्थ हो सकता है?

  3. Oracle पर SQL इंजेक्शन कैसे करें

  4. कोडइग्निटर से dbms_mview.refresh निष्पादित करें

  5. NVL और Coalesce के बीच Oracle अंतर