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

WIDTH_BUCKET () Oracle में फ़ंक्शन

Oracle में, WIDTH_BUCKET() फ़ंक्शन आपको इक्विविथ हिस्टोग्राम बनाने की अनुमति देता है, जिसमें हिस्टोग्राम श्रेणी को समान आकार वाले अंतरालों में विभाजित किया जाता है।

किसी दिए गए व्यंजक के लिए, WIDTH_BUCKET() बकेट नंबर देता है जिसमें मूल्यांकन के बाद इस अभिव्यक्ति का मूल्य गिर जाएगा।

सिंटैक्स

वाक्य रचना इस प्रकार है:

WIDTH_BUCKET(expr, min_value, max_value, num_buckets)

कहां:

  • expr वह अभिव्यक्ति है जिसके लिए हिस्टोग्राम बनाया जा रहा है। इस व्यंजक को एक संख्यात्मक या डेटाटाइम मान या उस मान का मूल्यांकन करना चाहिए जिसे परोक्ष रूप से एक संख्यात्मक या डेटाटाइम मान में परिवर्तित किया जा सकता है। अगर expr null . का मूल्यांकन करता है , तब व्यंजक null returns लौटाता है ।
  • min_value और max_value वे भाव हैं जो expr . के लिए स्वीकार्य सीमा के अंतिम बिंदुओं तक हल होते हैं . इन दोनों अभिव्यक्तियों को संख्यात्मक या डेटाटाइम मानों का भी मूल्यांकन करना चाहिए, और न ही null का मूल्यांकन कर सकते हैं ।
  • num_buckets एक अभिव्यक्ति है जो बाल्टी की संख्या को इंगित करने वाले स्थिरांक को हल करती है। इस व्यंजक का मूल्यांकन एक धनात्मक पूर्णांक होना चाहिए।

उदाहरण

यह कैसे काम करता है, यह दिखाने के लिए यहां एक उदाहरण दिया गया है।

SELECT 
  WIDTH_BUCKET(3, 1, 12, 3) AS r1,
  WIDTH_BUCKET(5, 1, 12, 3) AS r2,
  WIDTH_BUCKET(9, 1, 12, 3) AS r3
FROM DUAL;

परिणाम:

   R1    R2    R3 
_____ _____ _____ 
    1     2     3 

यहाँ एक स्पष्टीकरण है। आइए प्रत्येक तर्क की जाँच करें, पिछले तर्क से शुरू होकर पहले तर्क तक पीछे की ओर कार्य करते हुए।

  • चौथा तर्क :मैं तीन बकेट निर्दिष्ट करता हूँ। मैं इसे 3 . का उपयोग करके करता हूं चौथे तर्क के रूप में।
  • दूसरा और तीसरा तर्क :मैं निर्दिष्ट करता हूं कि सीमा 1 और 12 के बीच है। इस मामले में, मेरा दूसरा तर्क 1 है और तीसरा तर्क है 12
  • पहला तर्क :इस मान की तुलना दूसरे और तीसरे तर्कों से की जाती है, ताकि यह पता चल सके कि इसे तीन में से किस बकेट को सौंपा जाना चाहिए। मेरे उदाहरण में मैं WIDTH_BUCKET() call को कॉल करता हूं अवधारणा को बेहतर ढंग से चित्रित करने के लिए तीन बार। मैं ऐसा इसलिए करता हूं ताकि मैं पहले तर्क के रूप में तीन अलग-अलग मान प्रदान कर सकूं, जिनमें से प्रत्येक को एक अलग बकेट को सौंपा गया है।

निम्न तालिका इसे देखने का एक और तरीका प्रदान करती है:

मान बाल्टी
1, 2, 3, 4 बाल्टी 1
5, 6, 7, 8 बाल्टी 2
9, 10, 11, 12 बाल्टी 3

तो हम देख सकते हैं कि पहली बकेट 1 और 4 के बीच के मानों को स्वीकार करती है, दूसरी बकेट 5 और 8 के बीच और तीसरी बकेट 9 और 12 के बीच के मानों के लिए है।

अगर मैं इसे बदल दूं ताकि चार बकेट हो जाएं, तो मेरा कोड कुछ इस तरह दिख सकता है:

SELECT 
  WIDTH_BUCKET(3, 1, 12, 4) AS r1,
  WIDTH_BUCKET(5, 1, 12, 4) AS r2,
  WIDTH_BUCKET(9, 1, 12, 4) AS r3
FROM DUAL;

और टेबल इस तरह दिखेगी:

मान बाल्टी
1, 2, 3 बाल्टी 1
4, 5, 6 बाल्टी 2
7, 8, 9 बाल्टी 3
10, 11, 12 बकेट 4

यहां एक और उदाहरण दिया गया है जिसमें केवल बाल्टी के आकार बदलते हैं:

SELECT 
  WIDTH_BUCKET(5, 1, 12, 3) AS r1,
  WIDTH_BUCKET(5, 1, 12, 6) AS r2,
  WIDTH_BUCKET(5, 1, 12, 10) AS r3
FROM DUAL;

परिणाम:

   R1    R2    R3 
_____ _____ _____ 
    2     3     4 

सीमा से बाहर

यदि इनपुट बकेट की सीमा से बाहर है, तो आपको 0 . मिलेगा या num_buckets +1, इस पर निर्भर करता है कि इनपुट सीमा से नीचे है या उससे ऊपर है। ऐसे मामलों में, Oracle डाटाबेस 0 . के तहत एक अंडरफ्लो बकेट बनाता है और एक अतिप्रवाह बकेट क्रमांकित num_buckets +1.

उदाहरण:

SELECT 
  WIDTH_BUCKET(-3, 1, 12, 3),
  WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL;

परिणाम:

   WIDTH_BUCKET(-3,1,12,3)    WIDTH_BUCKET(20,1,12,3) 
__________________________ __________________________ 
                         0                          4 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AWS EC2 से AWS RDS में Oracle डेटाबेस माइग्रेट करना, भाग 3

  2. oci_bind_by_name और to_date PHP/OCI/Oracle

  3. JDK 8 के साथ Mac OS पर Oracle SQL डेवलपर 19.1 स्थापित करें

  4. Oracle में ABS () फ़ंक्शन

  5. Oracle SQL एस्केप कैरेक्टर ('&' के लिए)