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