खोज…


परिचय

आप मानों के समूहों के आधार पर मूल्यों को निर्धारित करने के लिए विश्लेषणात्मक कार्यों का उपयोग करते हैं। उदाहरण के लिए, आप इस प्रकार के फ़ंक्शन का उपयोग रनिंग योग, प्रतिशत, या किसी समूह में शीर्ष परिणाम निर्धारित करने के लिए कर सकते हैं।

वाक्य - विन्यास

  1. FIRST_VALUE (scalar_expression) OVER ([partition_by_clause] order_by_clause [row_range_clause])
  2. LAST_VALUE (scalar_expression) OVER ([विभाजन_by_clause] आदेश_by_clause [पंक्तियों_ व्यवस्था_क्लाज])
  3. LAG (scalar_expression [, ऑफसेट] [, डिफ़ॉल्ट]) OVER ([विभाजन_by_clause] order_by_clause)
  4. LEAD (scalar_expression [, ऑफसेट], [डिफ़ॉल्ट]) OVER ([विभाजन_by_clause] order_by_clause)
  5. PERCENT_RANK () OVER ([partition_by_clause] order_by_clause)
  6. CUME_DIST () OVER ([partition_by_clause] order_by_clause)
  7. PERCENTILE_DISC (num_literal) विथिन ग्रुप (ORDER BY ऑर्डर_by_exp [ASC | DESC]) OVER ([<part_by_clause>])
  8. PERCENTILE_CONT (num_literal) WithIN GROUP (ORDER BY order_by_exp_ [ASC | DESC]) OVER ([<part_by_clause>])

FIRST_VALUE

आप पहली बार एक निर्धारित परिणाम सेट में पहला मान निर्धारित करने के लिए FIRST_VALUE फ़ंक्शन का उपयोग करते हैं, जिसे आप स्केलर अभिव्यक्ति का उपयोग करके पहचानते हैं।

SELECT StateProvinceID, Name, TaxRate,
       FIRST_VALUE(StateProvinceID)
        OVER(ORDER BY TaxRate ASC) AS FirstValue
FROM SalesTaxRate;

इस उदाहरण में, FIRST_VALUE फ़ंक्शन का उपयोग राज्य या प्रांत की ID को सबसे कम कर दर के साथ वापस करने के लिए किया जाता है। OVER क्लॉज का उपयोग टैक्स दरों को न्यूनतम दर प्राप्त करने के लिए किया जाता है।

StateProvinceID नाम कर दर FirstValue
74 यूटा स्टेट सेल्स टैक्स 5.00 74
36 मिनेसोटा राज्य बिक्री कर 6.75 74
30 मैसाचुसेट्स राज्य बिक्री कर 7.00 74
1 कनाडा के जी.एस.टी. 7.00 74
57 कनाडा के जी.एस.टी. 7.00 74
63 कनाडा के जी.एस.टी. 7.00 74

LAST_VALUE

LAST_VALUE फ़ंक्शन ऑर्डर किए गए परिणाम सेट में अंतिम मान प्रदान करता है, जिसे आप स्केलर अभिव्यक्ति का उपयोग करके निर्दिष्ट करते हैं।

SELECT TerritoryID, StartDate, BusinessentityID,
       LAST_VALUE(BusinessentityID) 
        OVER(ORDER BY TerritoryID) AS LastValue
FROM SalesTerritoryHistory;

यह उदाहरण दिए गए मानों में प्रत्येक LAST_VALUE लिए अंतिम मान वापस करने के लिए LAST_VALUE फ़ंक्शन का उपयोग करता है।

TerritoryID आरंभ करने की तिथि BusinessentityID LastValue
1 2005-07-01 00.00.00.000 280 283
1 2006-11-01 00.00.00.000 284 283
1 2005-07-01 00.00.00.000 283 283
2 2007-01-01 00.00.00.000 277 275
2 2005-07-01 00.00.00.000 275 275
3 2007-01-01 00.00.00.000 275 277

LAG और लीड

LAG फ़ंक्शन समान परिणाम सेट में वर्तमान पंक्ति से पहले पंक्तियों पर डेटा प्रदान करता है। उदाहरण के लिए, किसी SELECT कथन में, आप पिछली पंक्ति के मानों के साथ वर्तमान पंक्ति में मानों की तुलना कर सकते हैं।

आप उन मानों को निर्दिष्ट करने के लिए एक स्केलर अभिव्यक्ति का उपयोग करते हैं जिनकी तुलना की जानी चाहिए। ऑफसेट पैरामीटर वर्तमान पंक्ति से पहले पंक्तियों की संख्या है जिसका उपयोग तुलना में किया जाएगा। यदि आप पंक्तियों की संख्या निर्दिष्ट नहीं करते हैं, तो एक पंक्ति के डिफ़ॉल्ट मान का उपयोग किया जाता है।

डिफ़ॉल्ट पैरामीटर मान जब में अभिव्यक्ति ऑफसेट एक है किया जाना चाहिये कि निर्दिष्ट करता है NULL मूल्य। यदि आप कोई मान निर्दिष्ट नहीं करते हैं, तो NULL का मान लौटाया जाता है।


LEAD फ़ंक्शन पंक्ति सेट में वर्तमान पंक्ति के बाद पंक्तियों पर डेटा प्रदान करता है। उदाहरण के लिए, किसी SELECT कथन में, आप वर्तमान पंक्ति में मानों की तुलना निम्न पंक्ति में मानों से कर सकते हैं।

आप उन मानों को निर्दिष्ट करते हैं जिनकी तुलना स्केलर अभिव्यक्ति का उपयोग करके की जानी चाहिए। ऑफसेट पैरामीटर वर्तमान पंक्ति के बाद पंक्तियों की संख्या है जिसका उपयोग तुलना में किया जाएगा।

आप मूल्य जब में अभिव्यक्ति ऑफसेट एक है किया जाना चाहिये कि निर्दिष्ट NULL डिफ़ॉल्ट पैरामीटर का उपयोग कर मूल्य। यदि आप इन मापदंडों को निर्दिष्ट नहीं करते हैं, तो एक पंक्ति के डिफ़ॉल्ट का उपयोग किया जाता है और NULL का मान लौटाया जाता है।

SELECT BusinessEntityID, SalesYTD,
       LEAD(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lead value",
       LAG(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lag value"
FROM SalesPerson;

यह उदाहरण BusinessEntityID कॉलम के आधार पर रिकॉर्ड किए गए रिकॉर्ड के साथ, ऊपर और नीचे सूचीबद्ध कर्मचारियों के साथ तिथि करने के लिए प्रत्येक कर्मचारी के बिक्री मूल्यों की तुलना करने के लिए LEAD और LAG फ़ंक्शन का उपयोग करता है।

BusinessEntityID SalesYTD लीड मूल्य लाग मान
274 559697.5639 3763178.1787 0.0000
275 3763178.1787 4251368.5497 559697.5639
276 4251368.5497 3189418.3662 3763178.1787
277 3189418.3662 1453719.4653 4251368.5497
278 1453719.4653 2315185.6110 3189418.3662
279 2315185.6110 1352577.1325 1453719.4653

PERCENT_RANK और CUME_DIST

PERCENT_RANK फ़ंक्शन पंक्ति के सापेक्ष पंक्ति की रैंकिंग की गणना करता है। प्रतिशत समूह में पंक्तियों की संख्या पर आधारित है जिनका वर्तमान पंक्ति की तुलना में कम मूल्य है।

परिणाम सेट में पहला मान हमेशा शून्य का एक प्रतिशत रैंक होता है। सेट में उच्चतम रैंक वाले - या अंतिम - मान का मूल्य हमेशा एक होता है।


CUME_DIST फ़ंक्शन मानों के समूह में एक निर्दिष्ट मान की सापेक्ष स्थिति की गणना करता है, उस मान से कम या उसके बराबर मानों का प्रतिशत निर्धारित करके। इसे संचयी वितरण कहा जाता है।

SELECT BusinessEntityID, JobTitle, SickLeaveHours,
PERCENT_RANK() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
       AS "Percent Rank",
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
       AS "Cumulative Distribution"
FROM Employee;

इस उदाहरण में, आप विभाजन के लिए एक ORDER क्लॉज का उपयोग करते हैं - या समूह - कर्मचारियों की नौकरी के शीर्षक के आधार पर SELECT स्टेटमेंट द्वारा प्राप्त की गई पंक्तियाँ, प्रत्येक समूह के परिणामों के साथ जो कि कर्मचारियों द्वारा उपयोग किए गए बीमार छुट्टी के घंटों के आधार पर छांटे गए हैं।

BusinessEntityID नौकरी का नाम SickLeaveHours प्रतिशत रैंक संचयी बटवारा
267 एप्लिकेशन विशेषज्ञ 57 0 0.25
268 एप्लिकेशन विशेषज्ञ 56 .333333333333333 0.75
269 एप्लिकेशन विशेषज्ञ 56 .333333333333333 0.75
272 एप्लिकेशन विशेषज्ञ 55 1 1
262 चीफ फाइनेंशियल ऑफिसर को असिस्टेंट 48 0 1
239 लाभ विशेषज्ञ 45 0 1
252 क्रेता 50 0 .111111111111111
251 क्रेता 49 0.125 .333333333333333
256 क्रेता 49 0.125 .333333333333333
253 क्रेता 48 0.375 .555555555555555
254 क्रेता 48 0.375 .555555555555555

PERCENT_RANK फ़ंक्शन प्रत्येक समूह के भीतर प्रविष्टियों को रैंक करता है। प्रत्येक प्रविष्टि के लिए, यह उसी समूह में प्रविष्टियों का प्रतिशत लौटाता है जिसमें निम्न मान होते हैं।

CUME_DIST फ़ंक्शन समान है, सिवाय इसके कि यह वर्तमान मान से कम या इसके बराबर मानों का प्रतिशत लौटाता है।

PERCENTILE_DISC और PERCENTILE_CONT

PERCENTILE_DISC फ़ंक्शन पहले प्रविष्टि के मूल्य को सूचीबद्ध करता है, जहां संचयी वितरण उस प्रतिशत से अधिक है, जो आप numeric_literal पैरामीटर का उपयोग करके प्रदान करते हैं।

मान रोसेट या विभाजन द्वारा समूहीकृत हैं, जैसा कि WITHIN GROUP क्लॉज द्वारा निर्दिष्ट किया गया है।


PERCENTILE_CONT समारोह के समान है PERCENTILE_DISC समारोह है, लेकिन पहले मिलान प्रवेश और अगली प्रविष्टि के योग का औसत देता है।

SELECT BusinessEntityID, JobTitle, SickLeaveHours,
       CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours ASC)
       AS "Cumulative Distribution",
       PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
          OVER(PARTITION BY JobTitle) AS "Percentile Discreet"
FROM Employee;

मिलान या 0.5 प्रतिशत से अधिक वाली पंक्ति से सटीक मान ज्ञात करने के लिए, आप PERCENTILE_DISC फ़ंक्शन में संख्यात्मक शाब्दिक के रूप में प्रतिशतक पास करते हैं। परिणाम सेट में Percentile Discreet स्तंभ उस पंक्ति के मूल्य को सूचीबद्ध करता है जिस पर संचयी वितरण निर्दिष्ट प्रतिशत से अधिक है।

BusinessEntityID नौकरी का नाम SickLeaveHours संचयी बटवारा परसेंटाइल डिसक्रीट
272 एप्लिकेशन विशेषज्ञ 55 0.25 56
268 एप्लिकेशन विशेषज्ञ 56 0.75 56
269 एप्लिकेशन विशेषज्ञ 56 0.75 56
267 एप्लिकेशन विशेषज्ञ 57 1 56

मानों के एक सेट पर गणना के आधार पर, आप PERCENTILE_CONT फ़ंक्शन का उपयोग करें। परिणामों में "परसेंटाइल कंटिन्यूअस" कॉलम परिणाम मूल्य के योग के औसत मूल्य और अगले उच्चतम मिलान मूल्य को सूचीबद्ध करता है।

SELECT BusinessEntityID, JobTitle, SickLeaveHours,
       CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours ASC)
       AS "Cumulative Distribution",
       PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY SickLeaveHours) 
          OVER(PARTITION BY JobTitle) AS "Percentile Discreet",
       PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY SickLeaveHours) 
          OVER(PARTITION BY JobTitle) AS "Percentile Continuous"
FROM Employee;
BusinessEntityID नौकरी का नाम SickLeaveHours संचयी बटवारा परसेंटाइल डिसक्रीट प्रतिशतक सतत
272 एप्लिकेशन विशेषज्ञ 55 0.25 56 56
268 एप्लिकेशन विशेषज्ञ 56 0.75 56 56
269 एप्लिकेशन विशेषज्ञ 56 0.75 56 56
267 एप्लिकेशन विशेषज्ञ 57 1 56 56


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow