मुख्य सामग्री पर जाएं

SQL RANK(): उदाहरणों के साथ पंक्तियों को कैसे व्यवस्थित करें

जानें कि SQL RANK() फ़ंक्शन का उपयोग करके पंक्तियों को रैंकिंग कैसे दें, टाई को कैसे संभालें, और इसे DENSE_RANK() तथा ROW_NUMBER() से कैसे तुलना करें।
अपडेट किया गया 25 सित॰ 2026  · 6 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

जब आप SQL के साथ काम करते हैं, तो डेटा को सॉर्ट करना सीधा होता है क्योंकि आप आसानी से ORDER BY का उपयोग करके पंक्तियों को व्यवस्थित कर सकते हैं। हालांकि, केवल परिणामों को ऑर्डर करने से आपको उस क्रम में प्रत्येक पंक्ति की स्थिति पता नहीं चलती। यहीं रैंकिंग उपयोगी होती है। केवल सॉर्ट किया हुआ डेटा देखने की बजाय, आप विशिष्ट मानदंडों के आधार पर प्रत्येक पंक्ति को 1st, 2nd, या 3rd जैसी स्थिति देना चाह सकते हैं।

RANK() फ़ंक्शन इस समस्या का समाधान करता है, क्योंकि यह परिभाषित क्रम के अनुसार प्रत्येक पंक्ति को एक संख्यात्मक रैंक प्रदान करता है। RANK() SQL विंडो फ़ंक्शंस का हिस्सा है, जो आपको पंक्तियों के एक सेट पर गणनाएँ करने की अनुमति देता है, जबकि व्यक्तिगत पंक्ति परिणाम लौटाए जाते हैं। 

इस ट्यूटोरियल में, मैं आपको RANK() का सिंटैक्स, व्यावहारिक उदाहरण, यह टाई को कैसे संभालता है, और DENSE_RANK() तथा ROW_NUMBER() जैसे समान फ़ंक्शंस से इसकी तुलना दिखाऊंगा।

यदि आप SQL में नए हैं, तो हमारे Introduction to SQL कोर्स से शुरुआत करें, या यदि आपको कुछ अनुभव है तो Intermediate SQL कोर्स करें। 

SQL RANK() फ़ंक्शन क्या है?

SQL RANK() फ़ंक्शन एक विंडो फ़ंक्शन है जो किसी निर्दिष्ट क्रम के आधार पर प्रत्येक पंक्ति को एक रैंक देता है। रैंकिंग पूरी तरह से विंडो फ़ंक्शन के अंदर दिए गए ORDER BY पर निर्भर होती है। इसलिए, यह प्रत्येक पंक्ति को ORDER BY क्लॉज़ के अनुसार 1, 2, 3, और आगे की स्थिति देता है।

ध्यान रखें कि जब आप RANK() का उपयोग करते हैं:

  • समान मान वाली पंक्तियों (टाई) को समान रैंक मिलती है।
  • जब टाई होती है, तो रैंकिंग अनुक्रम में अंतराल आते हैं। उदाहरण के लिए, यदि दो पंक्तियाँ रैंक 2 पर हैं, तो अगली रैंक 3 नहीं बल्कि 4 होगी।

SQL RANK() सिंटैक्स

RANK() फ़ंक्शन का बुनियादी सिंटैक्स इस प्रकार है:

RANK() OVER (ORDER BY column)

जहाँ:

  • OVER क्लॉज़: वह विंडो (पंक्तियों का सेट) परिभाषित करता है जिस पर फ़ंक्शन कार्य करता है।

  • ORDER BY: यह निर्धारित करता है कि रैंकिंग कैसे लागू होगी, जैसे उच्चतम से निम्नतम।

  • PARTITION BY (वैकल्पिक): डेटा को समूहों में विभाजित करता है, जिससे प्रत्येक समूह के भीतर अलग से रैंकिंग होती है।

नीचे PARTITION BY क्लॉज़ के साथ RANK() फ़ंक्शन का सिंटैक्स दिया गया है:

RANK() OVER (PARTITION BY column1 ORDER BY column2)

SQL RANK() फ़ंक्शन प्रमुख डेटाबेस में व्यापक रूप से समर्थित है। इनमें PostgreSQL, MySQL (8.0+), Microsoft SQL Server, और Oracle Database शामिल हैं। सिंटैक्स अधिकतर इन प्रणालियों में समान है, क्योंकि यह मानक ANSI SQL विनिर्देश का हिस्सा है।

SQL RANK() का बुनियादी उदाहरण

अब जब आपने RANK() फ़ंक्शन का सिंटैक्स समझ लिया है, तो मैं आपको एक साधारण उदाहरण दिखाता हूँ कि यह कैसे काम करता है।

मान लें कि आपके पास employees तालिका है जिसमें प्रत्येक कर्मचारी की वेतन जानकारी है।

कर्मचारी तालिका।

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

-- Rank employees by salary
SELECT 
    name,
    salary,
    RANK() OVER (ORDER BY salary DESC) AS rank_position
FROM employees;

ऊपर दी गई क्वेरी में, पंक्तियाँ वेतन के अनुसार उच्चतम से ऑर्डर की गई हैं, इसलिए सबसे अधिक वेतन को रैंक 1 मिलता है। जब दो पंक्तियों का वेतन समान होता है, तो उन्हें समान रैंक मिलती है।

SQL में RANK() फ़ंक्शन का उपयोग।

आप देखेंगे कि यदि दो पंक्तियों के मान समान हैं, तो उन्हें समान रैंक मिलती है।

फिर अगली रैंक छोड़ दी जाती है। SQL टाई को ध्यान में रखते हुए अगला रैंक मान छोड़ देता है।

समूहकरण और डेटा एग्रीगेशन के बारे में अधिक जानने के लिए मैं हमारा Introduction to SQL Server कोर्स करने की सलाह देता हूँ।

PARTITION BY के साथ SQL RANK()

जैसा कि हमने पहले सीखा, PARTITION BY क्लॉज़ आपको पूरे डेटासेट के बजाय समूहों के भीतर रैंकिंग लागू करने देता है।

नीचे दिए गए उदाहरण में, कर्मचारियों को department के अनुसार समूहित किया गया है, और प्रत्येक विभाग के भीतर रैंकिंग नई शुरू होती है। इसलिए, प्रत्येक समूह का अपना स्वतंत्र रैंकिंग अनुक्रम होता है।

-- Rank employees within each department
SELECT 
    name,
    department,
    salary,
    RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

PARTITION BY के साथ SQL RANK() का उपयोग

ऊपर दिए गए परिणामों से, हम देख सकते हैं कि “Sales” में Emily Johnson और Michael Brown दोनों रैंक 1 साझा करते हैं, जबकि “HR” में William Miller और Olivia Wilson भी रैंक 1 साझा करते हैं।

SQL RANK() बनाम DENSE_RANK() बनाम ROW_NUMBER()

SQL में डेटा रैंक करते समय, आप RANK(), DENSE_RANK(), या ROW_NUMBER() का उपयोग चुन सकते हैं। ये फ़ंक्शंस देखने में समान लग सकते हैं, लेकिन उनका व्यवहार इस प्रकार है:

  • RANK(): टाई के मामले में समान रैंक दी जाती है, इसलिए टाई के बाद रैंक में गैप आते हैं।

  • DENSE_RANK(): टाई के मामले में समान रैंक दी जाती है, इसलिए रैंकिंग में कोई गैप नहीं होता।

  • ROW_NUMBER(): हर पंक्ति को एक अद्वितीय संख्या मिलती है, भले ही मान समान हों—टाई नहीं होती।

इन अंतरों को बेहतर समझने के लिए, आइए नीचे दी गई क्वेरी का उपयोग करके साइड-बाय-साइड तुलना करें:

-- Compare RANK() vs DENSE_RANK() vs ROW_NUMBER()
SELECT 
    name,
    salary,

    RANK() OVER (ORDER BY salary DESC) AS rank_val,          -- allows gaps after ties

    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank1,  -- no gaps, consecutive ranks

    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num      -- always unique sequence

FROM employees;

SQL RANK() बनाम DENSE_RANK() बनाम ROW_NUMBER()

ऊपर दिए गए परिणामों से, आप यह चुन सकते हैं:

  • RANK() का उपयोग तब करें जब स्थिति महत्व रखती है और गैप स्वीकार्य हैं।

  • DENSE_RANK() का उपयोग तब करें जब आप निरंतर रैंकिंग चाहते हों।

  • ROW_NUMBER() का उपयोग तब करें जब हर पंक्ति के लिए एक अद्वितीय संख्या चाहिए, जैसे डेटा पेजिनेशन में।

SQL RANK() का उपयोग कब करें

SQL RANK() फ़ंक्शन तब सबसे उपयोगी होता है जब आप डेटा को ऑर्डर करना चाहते हैं और टाई को स्वाभाविक रूप से संभालना चाहते हैं। मुझे यह निम्नलिखित उपयोग मामलों के लिए भी महत्वपूर्ण लगता है:

  • लीडरबोर्ड: जब आप स्कोर के आधार पर खिलाड़ियों या उपयोगकर्ताओं को रैंक करना चाहते हैं, ताकि समान प्रदर्शन पर टाई की अनुमति हो।
  • बिक्री प्रदर्शन रैंकिंग: यदि आप राजस्व के आधार पर शीर्ष-प्रदर्शन करने वाले कर्मचारियों या क्षेत्रों की पहचान करना चाहते हैं, भले ही परिणाम समान हों।
  • शीर्ष-N मानों की पहचान: यह “शीर्ष 3 वेतन” जैसी क्वेरी के लिए उपयोगी है, विशेष रूप से जब टाई शामिल होनी चाहिए।

SQL RANK() के साथ आम गलतियाँ

यहाँ कुछ गलतियाँ हैं जिनका मैंने SQL RANK() फ़ंक्शन का उपयोग करते समय सामना किया है, और आप इन्हें कैसे टाल सकते हैं:

  • ORDER BY भूल जाना: ORDER BY क्लॉज़ के बिना, रैंकिंग की कोई परिभाषित लॉजिक नहीं होती और अप्रत्याशित परिणाम मिल सकते हैं।

  • टाई व्यवहार को गलत समझना: एक शुरुआती के रूप में, आप 1, 2, 2, 3 की अपेक्षा कर सकते हैं, लेकिन RANK() रैंकों में गैप (1, 2, 2, 4) पैदा करता है।

  • जब ROW_NUMBER() चाहिए तब RANK() का उपयोग करना: यदि आपको अद्वितीय अनुक्रमिक मान चाहिए, तो ROW_NUMBER() बेहतर विकल्प है।

  • जहाँ ज़रूरत हो वहाँ PARTITION BY का उपयोग न करना: बिना पार्टिशनिंग के, रैंकिंग समूहों के भीतर होने के बजाय वैश्विक रूप से लागू होती है।

SQL RANK() के उपयोग के लिए सर्वोत्तम प्रथाएँ

अपनी क्वेरियों को साफ़ रखने और अपेक्षित परिणाम सुनिश्चित करने के लिए, मैं सुझाव देता हूँ कि SQL RANK() फ़ंक्शन का उपयोग करते समय ये सर्वोत्तम प्रथाएँ अपनाएँ:

  • हमेशा स्पष्ट ऑर्डरिंग परिभाषित करें: ORDER BY क्लॉज़ के साथ स्पष्ट रहें, जैसे DESC, ताकि रैंकिंग अस्पष्ट न हो।

  • उचित रैंकिंग फ़ंक्शन चुनें: टाई को आप कैसे संभालना चाहते हैं, इसके आधार पर RANK(), DENSE_RANK(), या ROW_NUMBER() चुनें।

  • टाई परिदृश्यों का परीक्षण करें: प्रोडक्शन में भेजने से पहले, जाँचें कि डुप्लीकेट मान होने पर आपका डेटा कैसा व्यवहार करता है।

  • फ़िल्टरिंग के साथ संयोजन करें: चूँकि आप RANK() को सीधे WHERE क्लॉज़ में उपयोग नहीं कर सकते, इसलिए जब आप “Top N” को फ़िल्टर करना चाहें, तो अपनी रैंकिंग क्वेरी को Subquery या CTE में रैप करें।

निष्कर्ष

RANK() SQL में क्रमबद्ध तुलना करने का एक उपयोगी टूल है, खासकर जब आपको वास्तविक दुनिया के परिदृश्यों जैसे समान मानों को प्रतिबिंबित करने वाले परिणाम चाहिए। यह समझना महत्वपूर्ण है कि यह टाई को कैसे संभालता है और क्यों रैंक दोहर सकते हैं तथा संख्याएँ छोड़ सकते हैं। एक बार जब आप इस व्यवहार में निपुण हो जाते हैं, तो आप जान पाएँगे कि अपने विशिष्ट उपयोग मामले के अनुसार इसे DENSE_RANK() और ROW_NUMBER() जैसे विकल्पों के साथ कब चुनना है।

अब जब आपने SQL में डेटा को रैंक करना सीख लिया है, तो मैं सुझाव देता हूँ कि यदि आप एक दक्ष डेटा विश्लेषक बनना चाहते हैं तो हमारा Associate Data Analyst in SQL करियर ट्रैक देखें, ताकि आवश्यक कौशल सीखे जा सकें। यदि आप SQL का उपयोग करके प्रोफेशनल डैशबोर्ड बनाना सीखना चाहते हैं, तो हमारा Reporting in SQL कोर्स भी उपयुक्त है।


Allan Ouko's photo
Author
Allan Ouko
LinkedIn

डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है. 

SQL RANK() FAQs

RANK() ORDER BY से कैसे अलग है?

ORDER BY केवल पंक्तियों को सॉर्ट करता है, जबकि RANK() सॉर्टिंग के बाद प्रत्येक पंक्ति को एक संख्यात्मक स्थिति देता है।

RANK() के परिणामों में गैप क्यों होते हैं?

RANK() के परिणामों में गैप इसलिए आ सकते हैं क्योंकि टाई होने पर कई पंक्तियाँ एक ही रैंक साझा करती हैं, जिससे अगली रैंक आगे खिसक जाती है।

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

RANK() टाई के बाद गैप बनाता है, जबकि DENSE_RANK() बिना गैप के क्रमिक रैंक देता है।

RANK() और ROW_NUMBER() में क्या अंतर है?

RANK() टाई की अनुमति देता है, लेकिन ROW_NUMBER() डुप्लीकेट होने पर भी हर पंक्ति को एक अद्वितीय संख्या देता है।

क्या RANK() सभी डेटाबेस में समर्थित है?

अधिकांश आधुनिक डेटाबेस RANK() को सपोर्ट करते हैं, जिनमें PostgreSQL, MySQL (8.0+), Microsoft SQL Server, और Oracle Database शामिल हैं।

विषय
SQL

DataCamp के साथ SQL सीखें

कोर्स

SQL में डेटा जॉइन करना

4 घंटा
341.7K
अपने SQL ज्ञान को बढ़ाएँ और टेबल्स को जोड़ना, रिलेशनल सेट थ्योरी लागू करना, और सबक्वेरीज़ के साथ काम करना सीखें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

कोर्स

इंटरमीडिएट SQL

4 घंटा
528.5K
हर कदम पर व्यावहारिक अभ्यास क्वेरीज़ के साथ, यह पाठ्यक्रम आपको आज ही अपने SQL कोड से डेटा का विश्लेषण करने के लिए ज़रूरी सब कुछ सिखाता है!

कोर्स

SQL में Data Manipulation

4 घंटा
337.9K
जटिल SQL क्वेरियों में महारत हासिल करें, डेटा विज्ञान के विविध प्रश्नों के उत्तर दें और PostgreSQL में विश्लेषण के लिए मजबूत डेटा सेट तैयार करें।
और देखेंRight Arrow