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

SQL PARTITION BY क्लॉज का उपयोग कब और कैसे करें

इस लेख में, हम यह पता लगाएंगे कि SQL PARTITION BY क्लॉज का उपयोग कब और कैसे करना है और इसकी तुलना GROUP BY क्लॉज के उपयोग से करें।

विंडो फ़ंक्शन को समझना

डेटाबेस उपयोगकर्ता डेटा विश्लेषण करने के लिए MAX (), MIN (), औसत () और COUNT () जैसे समग्र कार्यों का उपयोग करते हैं। ये फ़ंक्शन एक संपूर्ण तालिका पर काम करते हैं और GROUP BY क्लॉज का उपयोग करके एकल एकत्रित डेटा लौटाते हैं। कभी-कभी, हमें पंक्तियों के एक छोटे से सेट पर समेकित मानों की आवश्यकता होती है। इस मामले में, कुल फ़ंक्शन के साथ संयुक्त विंडो फ़ंक्शन वांछित आउटपुट प्राप्त करने में मदद करता है। विंडो फ़ंक्शन ओवर () क्लॉज का उपयोग करता है, और इसमें निम्नलिखित फ़ंक्शन शामिल हो सकते हैं:

  • विभाजन द्वारा:  यह पंक्तियों या क्वेरी परिणाम को छोटे विभाजनों में विभाजित करता है।
  • आदेश दें:  यह विभाजन विंडो के लिए आरोही या अवरोही क्रम में पंक्तियों को व्यवस्थित करता है। डिफ़ॉल्ट क्रम आरोही है।
  • पंक्ति या श्रेणी:  आप प्रारंभ और समापन बिंदुओं को निर्दिष्ट करके विभाजन में पंक्तियों को और सीमित कर सकते हैं।

इस लेख में, हम क्लॉज द्वारा SQL PARTITION की खोज पर ध्यान केंद्रित करेंगे।

नमूना डेटा तैयार करना

मान लीजिए कि हमारे पास एक टेबल [सेल्सएलटी] है। [ऑर्डर] जो ग्राहक ऑर्डर विवरण संग्रहीत करता है। इसमें एक कॉलम [शहर] है जो उस ग्राहक शहर को निर्दिष्ट करता है जहां ऑर्डर दिया गया था।

टेबल बनाएं [सेल्सएलटी]। /2021', 'मोहन गुप्ता', 'अलवर', 10000UNION ALLSELECT 2,'02/04/2021', 'लकी अली', 'कोटा',20000UNION ALLSELECT 3,'03/02/2021','Raj Kumar' , 'जयपुर', 5000UNION ALLSELECT 4, '04/02/2021', 'ज्योति कुमारी', 'जयपुर', 15000UNION ALLSELECT 5, '05/03/2021', 'राहुल गुप्ता', 'जयपुर', 7000UNION ALLSELECT 6 ,'06/04/2021', 'मोहन कुमार', 'अलवर', 25000यूनियन सभी चयन 7,'07/02/2021', 'कशिश अग्रवाल', 'अलवर', 15000यूनियन सभी चयन 8,'08/03/2021' ,'नगर सिंह','कोटा',2000UNION ALLSELECT 9,'09/04/2021','Anil KG','Alwar',1000Go

मान लीजिए कि हम स्थान (शहर) द्वारा कुल ऑर्डर मूल्य जानना चाहते हैं। इस उद्देश्य के लिए, हम नीचे दिखाए गए अनुसार SUM() और GROUP BY फ़ंक्शन का उपयोग करते हैं।

ग्राहक शहर के रूप में शहर का चयन करें, [बिक्री एलटी] से कुल राशि के रूप में राशि (राशि)। 

परिणाम सेट में, हम सेलेक्ट स्टेटमेंट में गैर-एकत्रित कॉलम का उपयोग नहीं कर सकते हैं। उदाहरण के लिए, हम आउटपुट में [ग्राहक नाम] प्रदर्शित नहीं कर सकते क्योंकि यह ग्रुप बाय क्लॉज में शामिल नहीं है।

यदि आप कॉलम सूची में गैर-एकत्रित कॉलम का उपयोग करने का प्रयास करते हैं तो SQL सर्वर निम्न त्रुटि संदेश देता है।

ग्राहक शहर के रूप में शहर, ग्राहक नाम, राशि, राशि (राशि) से अधिक (शहर के अनुसार विभाजन) कुल आदेश राशि [SalesLT] से चुनें। [आदेश]

जैसा कि नीचे दिखाया गया है, खंड द्वारा विभाजन एक छोटी विंडो (डेटा पंक्तियों का सेट) बनाता है, एकत्रीकरण करता है और इसे प्रदर्शित करता है। आप इस आउटपुट में गैर-एकत्रित कॉलम भी देख सकते हैं।

इसी तरह, आप विंडो में पंक्तियों से औसत, न्यूनतम और अधिकतम राशि की गणना करने के लिए AVG (), MIN (), MAX () फ़ंक्शन का उपयोग कर सकते हैं।

ग्राहक के रूप में शहर चुनें राशि) ओवर (शहर द्वारा विभाजन) MaxOrderAmountFROM [SalesLT]।[आदेश]

ROW_NUMBER() फ़ंक्शन के साथ SQL PARTITION BY क्लॉज का उपयोग करना

पहले, हमें PARTITION BY क्लॉज का उपयोग करके विंडो में समेकित मान मिलते थे। मान लीजिए कि कुल के बजाय, हमें एक विभाजन में संचयी योग की आवश्यकता है।

एक संचयी कुल निम्नलिखित तरीकों से काम करता है।

पंक्ति संचयी योग
1 रैंक 1+ 2
2 रैंक 2+3
3 रैंक 3+4

पंक्ति रैंक की गणना ROW_NUMBER() फ़ंक्शन का उपयोग करके की जाती है। आइए पहले इस फ़ंक्शन का उपयोग करें और पंक्ति रैंक देखें।

  • ROW_NUMBER() फ़ंक्शन OVER और PARTITION BY क्लॉज का उपयोग करता है और परिणामों को आरोही या अवरोही क्रम में सॉर्ट करता है। यह 1 से क्रमबद्ध क्रम में पंक्तियों की रैंकिंग शुरू करता है।
चुनें शहर के रूप में CustomerCity, CustomerName, राशि, ROW_NUMBER() OVER(PARTITION by PARITION by DESC राशि DESC) AS [पंक्ति संख्या] [SalesLT] से।[आदेश]

उदाहरण के लिए, [अलवर] शहर में, सबसे अधिक राशि (25000.00) वाली पंक्ति पंक्ति 1 में है। जैसा कि नीचे दिखाया गया है, यह पार्टिशन बाय क्लॉज द्वारा निर्दिष्ट विंडो में पंक्तियों को रैंक करता है। उदाहरण के लिए, हमारे पास तीन अलग-अलग शहर हैं [अलवर], [जयपुर] और [कोटा], और प्रत्येक विंडो (शहर) को अपनी पंक्ति रैंक मिलती है।

संचयी कुल की गणना करने के लिए, हम निम्नलिखित तर्कों का उपयोग करते हैं।

  • वर्तमान पंक्ति:यह निर्दिष्ट सीमा में प्रारंभ और समाप्ति बिंदु निर्दिष्ट करता है।
  • 1 निम्नलिखित:यह वर्तमान पंक्ति से अनुसरण करने के लिए पंक्तियों की संख्या (1) निर्दिष्ट करता है।
ग्राहक के रूप में शहर चुनें ) संचयी योग [SalesLT] के रूप में। [आदेश]

निम्न छवि दर्शाती है कि आपको पार्टिशन बाय क्लॉज द्वारा निर्दिष्ट विंडो में कुल योग के बजाय संचयी योग मिलता है।

अगर हम पंक्तियों का असीमित पूर्वसर्ग  . का उपयोग करते हैं SQL PARTITION BY क्लॉज में, यह निम्नलिखित तरीके से संचयी कुल की गणना करता है। यह निर्दिष्ट विंडो में उच्चतम मान वाली पंक्तियों के साथ वर्तमान पंक्तियों का उपयोग करता है।

पंक्ति संचयी योग
1 रैंक 1
2 रैंक 1+2
3 रैंक 1+2+3
 ग्राहक के रूप में शहर चुनें SalesLT].[आदेश]

ग्रुप बाय और एसक्यूएल पार्टिशन बाय क्लॉज की तुलना करना

GROUP BY द्वारा विभाजन
यह कुल मानों की गणना के बाद प्रति समूह एक पंक्ति देता है। यह SELECT स्टेटमेंट से सभी पंक्तियों को समेकित मानों के अतिरिक्त कॉलम के साथ लौटाता है।
हम SELECT स्टेटमेंट में गैर-एग्रीगेट किए गए कॉलम का इस्तेमाल नहीं कर सकते हैं। हम SELECT स्टेटमेंट में आवश्यक कॉलम का उपयोग कर सकते हैं, और यह गैर-एकत्रित कॉलम के लिए कोई त्रुटि उत्पन्न नहीं करता है।
इसमें SELECT स्टेटमेंट से रिकॉर्ड्स को फ़िल्टर करने के लिए HAVING क्लॉज का उपयोग करने की आवश्यकता होती है। पार्टिशन फ़ंक्शन में SELECT स्टेटमेंट में उपयोग किए गए कॉलम के अलावा WHERE क्लॉज में अतिरिक्त विधेय हो सकते हैं।
ग्रुप BY का उपयोग नियमित समुच्चय में किया जाता है। PARTITION BY का उपयोग विंडो समुच्चय में किया जाता है।
हम इसका उपयोग पंक्ति संख्याओं या उनके रैंक की गणना के लिए नहीं कर सकते। यह छोटी विंडो में पंक्ति संख्या और उनके रैंक की गणना कर सकता है।

इसे उपयोग में लाना

अलग-अलग समूह में एकत्रित मानों के लिए एकाधिक डेटा समूहों के साथ काम करते समय खंड द्वारा SQL विभाजन का उपयोग करने की अनुशंसा की जाती है। इसी तरह, इसका उपयोग समेकित मानों के अतिरिक्त कॉलम के साथ मूल पंक्तियों को देखने के लिए किया जा सकता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:IF क्लॉज WHERE क्लॉज के भीतर

  2. टीएसक्यूएल में नल कैरेक्टर शाब्दिक क्या है?

  3. SQL सर्वर में CTE के लिए गाइड

  4. स्तंभ का नाम बदलें SQL सर्वर 2008

  5. SQL सर्वर में Msg 512 "सबक्वायरी ने 1 से अधिक मान लौटाए" को ठीक करें