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

SQL में RANK और DENSE_RANK में क्या अंतर है?

समस्या:

आप RANK . द्वारा निर्मित रैंकिंग की तुलना करना चाहते हैं और DENSE_RANK और उन्हें तालिका में नए कॉलम के रूप में जोड़ें।

उदाहरण:

हमारे डेटाबेस में sales_assistant निम्नलिखित कॉलम में डेटा के साथ:id (प्राथमिक कुंजी), first_name , last_name , month , और sold products

<थ>पहला_नाम
आईडी last_name माह बेचे गए उत्पाद
1 लिसा काला 5 2300
2 मैरी याकूब 5 2400
3 लिसा काला 6 2700
4 मैरी याकूब 6 2700
5 एलेक्स स्मिथ 6 2900
6 मैरी याकूब 7 1200
7 लिसा काला 7 1200
8 एलेक्स स्मिथ 7 1000

आइए प्रत्येक बिक्री सहायक का पहला और अंतिम नाम और बेचे गए उत्पादों की संख्या प्रदर्शित करें। हम उन्हें अवरोही क्रम में बेचे जाने वाले उत्पादों की संख्या के संदर्भ में भी रैंक करना चाहते हैं।

समाधान 1:

चयन रैंक() ओवर (बेचे गए उत्पादों डीईएससी द्वारा ऑर्डर) एएस आर, डेंस_रैंक() ओवर (बेचे गए उत्पादों डीईएससी द्वारा ऑर्डर) एएस डॉ, फर्स्ट_नाम, लास्ट_नाम, महीना, बेचे गए उत्पाद सेल्स_असिस्टेंट;

यह क्वेरी दो रैंकिंग लौटाती है:एक RANK . द्वारा निर्मित और दूसरा DENSE_RANK . द्वारा . क्या अंतर है?

सीधे शब्दों में कहें, RANK समान रैंक संख्या वाले रिकॉर्ड के बाद पदों की संख्या को छोड़ देता है। रैंकिंग RANK_DENSE 1 से 6 तक स्थिति संख्या लौटाता है क्योंकि यह समान रैंक संख्या वाले रिकॉर्ड को नहीं छोड़ता है:

<थ>पहला_नाम
r डॉ last_name माह बेचे गए उत्पाद
1 1 एलेक्स स्मिथ 6 2900
2 2 लिसा काला 6 2700
2 2 मैरी याकूब 6 2700
4 3 मैरी याकूब 5 2400
5 4 लिसा काला 5 2300
6 5 मैरी याकूब 7 1200
6 5 लिसा काला 7 1200
8 6 एलेक्स स्मिथ 7 1000

चर्चा:

यदि आप परिणाम सेट में पंक्तियों को रैंक करना चाहते हैं, तो SQL RANK() . प्रदान करता है और DENSE_RANK कार्य। इन कार्यों का उपयोग SELECT . में किया जाता है अन्य कॉलम के साथ। RANK के बाद या DENSE_RANK , हम OVER() . कहते हैं फ़ंक्शन, जो एक ORDER BY . लेता है एक रैंकिंग निर्दिष्ट करने से पहले क्रमबद्ध करने के लिए कॉलम के नाम के साथ क्लॉज।

DENSE_RANK के विपरीत , RANK समान रैंकिंग के बाद स्थान छोड़ देता है। छोड़े गए पदों की संख्या इस बात पर निर्भर करती है कि कितनी पंक्तियों की रैंकिंग समान थी। उदाहरण के लिए, मैरी और लिसा ने समान संख्या में उत्पाद बेचे और दोनों को #2 स्थान दिया गया। RANK के साथ , अगला स्थान #4 है; DENSE_RANK . के साथ , अगला स्थान #3 है।

दोनों RANK और RANK_DENSE डेटा के विभाजन पर काम करें:

समाधान 1:

चयन रैंक() ओवर (बेचे गए उत्पादों के अनुसार डीईएससी द्वारा विभाजन) आर, DENSE_RANK () के रूप में (बेचे गए उत्पादों के अनुसार महीने के क्रम में विभाजन) पूर्व> 

आप दिए गए कॉलम के अनुसार रिकॉर्ड्स को समूहों में विभाजित कर सकते हैं (हमारे उदाहरण में, month ) इस स्थिति में, रिकॉर्ड को विभाजन के हिस्से के रूप में रैंक किया जाता है:

<थ>पहला_नाम
r डॉ last_name माह बेचे गए उत्पाद
1 1 मैरी याकूब 5 2400
2 2 लिसा काला 5 2300
1 1 एलेक्स स्मिथ 6 2900
2 2 लिसा काला 6 2700
2 2 मैरी याकूब 6 2700
1 1 मैरी याकूब 7 1200
1 1 लिसा काला 7 1200
3 2 एलेक्स स्मिथ 7 1000

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apache POI का उपयोग करके जावा प्रोग्राम से एक्सेल दस्तावेज़ कैसे बनाएं?

  2. एसक्यूएल में कॉलम के मूल्यों का योग कैसे करें?

  3. रेडीक्लाउड रेडीशिपर एक्स

  4. SQL कमांड को कैसे वर्गीकृत किया जाता है | यूबीआईक्यू

  5. विदेशी कुंजी के माध्यम से किसी तालिका में रिकॉर्ड के संदर्भों की गणना करना