PostgreSQL में, width_bucket()
एक गणितीय फ़ंक्शन है जो एक समान चौड़ाई वाले हिस्टोग्राम में बकेट (व्यक्तिगत सेगमेंट) को मान निर्दिष्ट करता है।
वापसी प्रकार int . है ।
सिंटैक्स
फ़ंक्शन का उपयोग निम्नलिखित तीन सिंटैक्स में से किसी के साथ किया जा सकता है:
width_bucket(operand dp, b1 dp, b2 dp, count int)
width_bucket(operand numeric, b1 numeric, b2 numeric, count int)
width_bucket(operand anyelement, thresholds anyarray)
पहले दो मूल रूप से समान हैं, सिवाय इसके कि वे विभिन्न डेटा प्रकारों का उपयोग करते हैं (दोहरी परिशुद्धता बनाम संख्यात्मक)।
इन तीन सिंटैक्स को नीचे समझाया गया है।
width_bucket(operand dp, b1 dp, b2 dp, count int)
- उस बकेट नंबर को लौटाता है, जिसमें एक हिस्टोग्राम में ऑपरेंड को असाइन किया जाएगा, जिसमें समान-चौड़ाई वाली बकेट की संख्या b1 से b2 तक होती है; सीमा के बाहर किसी इनपुट के लिए 0 या काउंट+1 लौटाता है।
width_bucket(operand numeric, b1 numeric, b2 numeric, count int)
- उस बकेट नंबर को लौटाता है, जिसमें एक हिस्टोग्राम में ऑपरेंड को असाइन किया जाएगा, जिसमें समान-चौड़ाई वाली बकेट की संख्या b1 से b2 तक होती है; सीमा के बाहर किसी इनपुट के लिए 0 या काउंट+1 लौटाता है।
width_bucket(operand anyelement, thresholds anyarray)
- बकेट नंबर देता है जिसमें ऑपरेंड को बकेट की निचली सीमाओं को सूचीबद्ध करने वाली एक सरणी दी जाएगी; पहली निचली सीमा से कम इनपुट के लिए 0 देता है; थ्रेसहोल्ड सरणी को क्रमबद्ध किया जाना चाहिए, सबसे छोटा पहले, या अप्रत्याशित परिणाम प्राप्त होंगे।
उदाहरण - पहला/दूसरा सिंटैक्स
जैसा कि उल्लेख किया गया है, पहले दो सिंटैक्स मूल रूप से समान हैं, सिवाय इसके कि वे विभिन्न डेटा प्रकारों (डबल सटीक बनाम संख्यात्मक) की रूपरेखा तैयार करते हैं।
पहले दो सिंटैक्स कैसे काम करते हैं, यह दिखाने के लिए यहां एक उदाहरण दिया गया है।
SELECT
width_bucket(3, 1, 12, 3),
width_bucket(5, 1, 12, 3),
width_bucket(9, 1, 12, 3);
परिणाम:
width_bucket | width_bucket | width_bucket --------------+--------------+-------------- 1 | 2 | 3
यहाँ एक स्पष्टीकरण है। आइए प्रत्येक तर्क की जाँच करें, पिछले तर्क से शुरू होकर पहले तर्क तक पीछे की ओर कार्य करते हुए।
- चौथा तर्क :मैं तीन बकेट निर्दिष्ट करता हूँ। मैं इसे चौथे तर्क के रूप में 3 का उपयोग करके करता हूं।
- दूसरा और तीसरा तर्क :मैं निर्दिष्ट करता हूं कि सीमा 1 और 12 के बीच है। इस मामले में, मेरा दूसरा तर्क 1 है और तीसरा तर्क 12 है।
- पहला तर्क :इस मान की तुलना दूसरे और तीसरे तर्कों से की जाती है, ताकि यह पता चल सके कि इसे तीन में से किस बकेट को सौंपा जाना चाहिए। मेरे उदाहरण में मैं
width_bucket()
. को कॉल करता हूं अवधारणा को बेहतर ढंग से चित्रित करने के लिए तीन बार। मैं ऐसा इसलिए करता हूं ताकि मैं पहले तर्क के रूप में तीन अलग-अलग मान प्रदान कर सकूं, जिनमें से प्रत्येक को एक अलग बकेट को सौंपा गया है।
निम्न तालिका इसे देखने का एक और तरीका प्रदान करती है:
मान | बाल्टी |
---|---|
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),
width_bucket(5, 1, 12, 4),
width_bucket(9, 1, 12, 4);
और टेबल इस तरह दिखेगी:
मान | बाल्टी |
---|---|
1, 2, 3 | बाल्टी 1 |
4, 5, 6 | बाल्टी 2 |
7, 8, 9 | बाल्टी 3 |
10, 11, 12 | बकेट 4 |
सीमा से बाहर
अगर इनपुट बकेट की सीमा से बाहर है, तो आपको या तो 0 मिलेगा या गिनती +1, इस पर निर्भर करता है कि इनपुट सीमा से नीचे है या उससे ऊपर।
उदाहरण:
SELECT
width_bucket(-3, 1, 12, 3),
width_bucket(20, 1, 12, 3);
परिणाम:
width_bucket | width_bucket --------------+-------------- 0 | 4
उदाहरण - तीसरा सिंटैक्स
तीसरे सिंटैक्स को प्रदर्शित करने के लिए, आइए ऊपर दिए गए पहले उदाहरण को लें, और तीसरे सिंटैक्स का उपयोग करने के लिए इसे संशोधित करें:
SELECT
width_bucket(3, array[1, 4, 8]),
width_bucket(5, array[1, 4, 8]),
width_bucket(9, array[1, 4, 8]);
परिणाम:
width_bucket | width_bucket | width_bucket --------------+--------------+-------------- 1 | 2 | 3
यहां मैंने 3 बाल्टी बनाई और प्रत्येक को स्पष्ट मान निर्दिष्ट किए। इस मामले में वे सभी समान-चौड़ाई वाली बकेट हैं, लेकिन यह कोई आवश्यकता नहीं है।
तीसरे सिंटैक्स का एक प्रमुख लाभ यह है कि यह आपको असमान चौड़ाई की बकेट बनाने की अनुमति देता है।
उदाहरण के लिए, मैं पिछले उदाहरण को इसमें संशोधित कर सकता हूं:
SELECT
width_bucket(3, array[1, 3, 12]),
width_bucket(5, array[1, 3, 12]),
width_bucket(9, array[1, 3, 12]);
परिणाम:
width_bucket | width_bucket | width_bucket --------------+--------------+-------------- 2 | 2 | 2
ऐसा करने से वे बकेट बदल जाते हैं जिन्हें प्रत्येक नंबर असाइन किया जाता है। अब, वे सभी नंबर दूसरी बकेट में हैं।
तीसरा सिंटैक्स विभिन्न प्रकार के उपयोग के मामलों के लिए उपयोगी हो सकता है। उदाहरण के लिए, आपके पास कई आयु समूह हो सकते हैं जो समान रूप से वितरित नहीं हैं।
SELECT
width_bucket(15, array[10, 18, 30, 50, 65]) AS "Age Group (15)",
width_bucket(45, array[10, 18, 30, 50, 65]) AS "Age Group (45)",
width_bucket(50, array[10, 18, 30, 50, 65]) AS "Age Group (50)";
परिणाम:
Age Group (15) | Age Group (45) | Age Group (50) ----------------+----------------+---------------- 1 | 3 | 4
सीमा से बाहर
यदि इनपुट पहली निचली सीमा से कम है तो फ़ंक्शन 0 देता है।
उदाहरण:
SELECT width_bucket(8, array[10, 40, 30]);
परिणाम:
0
Width_Bucket() बनाम CASE
इस पृष्ठ पर उदाहरण CASE
. का उपयोग करके भी किए जा सकते हैं बयान। अंतर यह है कि width_bucket()
इसे अधिक संक्षिप्त तरीके से करता है।
यहां बताया गया है कि कैसे हम CASE
. का उपयोग करके पिछले उदाहरण को फिर से लिख सकते हैं बयान।
SELECT
CASE
WHEN 8 BETWEEN 0 AND 9 THEN 0
WHEN 8 BETWEEN 10 AND 39 THEN 1
WHEN 8 BETWEEN 40 AND 49 THEN 2
ELSE 3
END;
परिणाम:
0
ध्यान रखें कि इन सभी उदाहरणों में इनपुट सामान्य रूप से एक स्थिरांक के बजाय एक चर या स्तंभ नाम होगा।