कोडिंग साक्षात्कार की तैयारी · पाठ

DENSE_RANK से Nवाँ सबसे अधिक मान

Nवें अलग मान तक सामान्यीकरण और डुप्लिकेट संभालना सीखें

पाठ 2, कुल 4 में से13 चरण

DENSE_RANK से Nवाँ सबसे अधिक मान, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Nवें सबसे अधिक वेतन तक सामान्यीकरण

एक बार जब आप दूसरा सबसे अधिक वेतन खोजना सीख लेते हैं, तो साक्षात्कारकर्ता तुरंत पूछते हैं: "अब मुझे Nवाँ सबसे अधिक वेतन दीजिए।" इसका सबसे साफ़ और ठोस उत्तर DENSE_RANK का उपयोग करता है।

तरीका हमेशा एक जैसा रहता है: अलग-अलग वेतनों को अवरोही क्रम में रैंक दें, फिर उस पंक्ति के लिए फ़िल्टर लगाएँ जिसकी रैंक N के बराबर है। चूँकि N बदलने पर तर्क नहीं बदलता, यह एक तरीका ऐसे सभी प्रश्नों का उत्तर देता है।

हम इसे क्रमशः बनाएँगे, समान वेतन और डुप्लिकेट मानों को संभालेंगे, और चर्चा करेंगे कि "अलग मान" वाले अर्थ के लिए DENSE_RANK ही सही रैंकिंग फ़ंक्शन क्यों है।

मुख्य ढाँचा

यह Nवें सबसे अधिक वेतन का दोबारा उपयोग किया जा सकने वाला ढाँचा है। स्थिर मान को साक्षात्कारकर्ता द्वारा माँगे गए N से बदलें।

आप भीतरी क्वेरी में DENSE_RANK की गणना करते हैं, क्योंकि विंडो फ़ंक्शन WHERE में नहीं रह सकता, फिर बाहर rnk = N के लिए फ़िल्टर लगाते हैं। तीसरे सबसे अधिक वेतन के लिए फ़िल्टर को rnk = 3 करें।

SELECT salary AS nth_highest
FROM (
  SELECT salary,
         DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
  FROM employee
) ranked
WHERE rnk = 3;

DENSE_RANK अलग-अलग मानों को संख्या कैसे देता है

DENSE_RANK बराबर मानों को समान रैंक देता है और उसके बाद कभी कोई अंतराल नहीं छोड़ता। साक्षात्कारकर्ता जिस "Nवें अलग मान" की बात करते हैं, उसकी यही सटीक परिभाषा है।

800, 800, 600, 600, 400 वेतनों के लिए:

  • 800 -> रैंक 1
  • 600 -> रैंक 2
  • 400 -> रैंक 3

इसलिए तीसरा सबसे अधिक वेतन 400 है, भले ही पाँच पंक्तियाँ हों। डुप्लिकेट मान अपने-आप एक ही रैंक में समा जाते हैं।

RANK गलत उत्तर क्यों देता है

RANK लगाने पर उत्तर गलत हो जाता है। RANK समान वेतनों की संख्या के अनुपात में अंतराल छोड़ता है।

800, 800, 600, 600, 400 के लिए:

  • 800, 800 -> रैंक 1 (दो पंक्तियाँ)
  • 600, 600 -> रैंक 3 (अंतराल, रैंक 2 नहीं)
  • 400 -> रैंक 5

rnk = 3 के लिए फ़िल्टर लगाने पर 600 मिलता है और rnk = 2 पर कुछ नहीं मिलता। जब तक साक्षात्कारकर्ता विशेष रूप से प्रतियोगिता-शैली की रैंकिंग न माँगे, "Nवें अलग वेतन" के लिए DENSE_RANK सही है।

ROW_NUMBER यहाँ भी गलत क्यों है

ROW_NUMBER समान वेतनों की पूरी तरह अनदेखी करते हुए हर पंक्ति को एक अलग संख्या देता है। 800, 800, 600, 600, 400 के लिए यह 1, 2, 3, 4, 5 देता है।

इसलिए rn = 3 पर 600 मिलता है, लेकिन rn = 2 पर अलग दूसरा मान नहीं, बल्कि डुप्लिकेट 800 मिलता है। ROW_NUMBER "Nवीं पंक्ति" का उत्तर देता है, "Nवाँ अलग मान" का नहीं।

ROW_NUMBER का उपयोग तभी करें जब प्रश्न वास्तव में किसी खास पंक्ति की माँग करता हो, जैसे डुप्लिकेट हटाना या हर समूह के शीर्ष N में से ठीक एक पंक्ति रखना।

SELECT salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn
FROM employee;

N को सुरक्षित रूप से पैरामीटर बनाना

वास्तविक कोड में आप रैंक को स्थिर रूप से नहीं लिखेंगे। N को पैरामीटर के रूप में भेजकर उससे तुलना करें। विंडो की परिभाषा वही रहेगी; केवल बाहरी फ़िल्टर को पैरामीटर बनाया जाएगा।

यहीं आप रैंक N पर समान वेतन पाने वाले सभी कर्मचारियों को भी लौटा सकते हैं: क्योंकि DENSE_RANK समान वेतनों को एक ही रैंक देता है, WHERE rnk = N कई पंक्तियाँ लौटा सकता है, यदि कई कर्मचारी Nवें अलग वेतन पर हों। अक्सर यही वांछित व्यवहार होता है।

SELECT id, salary
FROM (
  SELECT id, salary,
         DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
  FROM employee
) ranked
WHERE rnk = :n;

सहसंबद्ध गिनती का सामान्यीकरण

विंडो फ़ंक्शन से पहले वाला तरीका भी सामान्यीकृत किया जा सकता है: कोई वेतन Nवाँ सबसे अधिक अलग वेतन तब होता है, जब उससे सख्ती से अधिक ठीक N - 1 अलग वेतन हों।

तीसरे सबसे अधिक वेतन के लिए ठीक 2 अधिक वेतन वाले अलग मान आवश्यक हैं। यह पुराने ऐसे इंजन में काम करता है जिनमें विंडो फ़ंक्शन नहीं होते, लेकिन इसकी क्षमता सीमित होती है, क्योंकि भीतरी गिनती हर बाहरी पंक्ति के लिए दोबारा चलती है।

SELECT DISTINCT salary AS nth_highest
FROM employee e
WHERE (
  SELECT COUNT(DISTINCT e2.salary)
  FROM employee e2
  WHERE e2.salary > e.salary
) = 2;

साक्षात्कारकर्ता द्वारा माँगा जाने वाला MySQL फ़ंक्शन रूप

LeetCode-शैली की "Nवाँ सबसे अधिक वेतन" समस्या में अक्सर एक ऐसा संग्रहीत फ़ंक्शन माँगा जाता है जो एक मान लौटाए। इसका मुख्य भाग केवल एक वेतन लौटाने के लिए बनाए गए DENSE_RANK ढाँचे जैसा ही है।

साक्षात्कार में आपको फ़ंक्शन का सटीक सिंटैक्स याद रखने की आवश्यकता नहीं है, लेकिन अलग-अलग वेतनों पर LIMIT N-1, 1 को संक्षिप्त MySQL शैली के रूप में पहचानना उपयोगी है।

SELECT DISTINCT salary
FROM employee
ORDER BY salary DESC
LIMIT 1 OFFSET 2;  -- N = 3, so OFFSET N-1

उदाहरण: चौथा सबसे अधिक वेतन

वेतन: 1000, 900, 900, 700, 500, 500, 300।

DENSE_RANK के साथ अलग-अलग वेतनों को अवरोही क्रम में:

  • 1000 -> 1
  • 900 -> 2
  • 700 -> 3
  • 500 -> 4
  • 300 -> 5

चौथा सबसे अधिक वेतन 500 है। ध्यान दें कि 500 वाली दोनों पंक्तियों की रैंक 4 है, इसलिए यदि आप उनकी आईडी भी चुनते हैं, तो rnk = 4 का फ़िल्टर 500 कमाने वाले दोनों कर्मचारियों को लौटाएगा।

प्रदर्शन संबंधी बातें

बड़े पैमाने पर ये तरीके एक-दूसरे की तुलना में कैसे हैं?

  • DENSE_RANK: डेटा पर एक बार क्रमबद्धता, फिर फ़िल्टर। यह कुशल है और क्वेरी प्लानर क्रमबद्धता के लिए वेतन पर इंडेक्स का उपयोग कर सकता है।
  • सहसंबद्ध गिनती: संभावित रूप से O(n²), क्योंकि भीतरी समुच्चय फ़ंक्शन हर पंक्ति के लिए चलता है। बड़ी तालिकाओं पर इससे बचें।
  • LIMIT/OFFSET: छोटे N के लिए तेज़, लेकिन फिर भी क्रमबद्धता आवश्यक है और बड़े ऑफ़सेट पर बहुत-सी पंक्तियों को पढ़कर छोड़ना पड़ता है।

शुरुआत DENSE_RANK से करें और आपका उत्तर शायद ही कभी गलत होगा।

उल्लेख करने योग्य सीमांत स्थितियाँ

अच्छे उम्मीदवारों को पूछे जाने से पहले ही इन सीमांत स्थितियों का उल्लेख करना चाहिए:

  • अलग-अलग वेतनों की संख्या से बड़ा N: फ़िल्टर किसी पंक्ति से मेल नहीं खाता और खाली परिणाम लौटाता है। पाठ 4 में इसे एकल NULL लौटाने के लिए मजबूर करना बताया गया है।
  • रैंक N पर समान वेतन: DENSE_RANK समान वेतन पाने वाले हर कर्मचारी को लौटाता है; तय करें कि यही वांछित है या नहीं।
  • N = 1: यह ढाँचा फिर भी काम करता है और अधिकतम वेतन लौटाता है।

त्वरित जाँच

Nवें सबसे अधिक वेतन वाले ढाँचे को लागू करें।

पुनरावलोकन

Nवें सबसे अधिक वेतन के लिए एक मुख्य उत्तर है: सबक्वेरी में DENSE_RANK() OVER (ORDER BY salary DESC) से अलग-अलग वेतनों की रैंक तय करें, फिर WHERE rnk = N का फ़िल्टर लगाएँ।

  • DENSE_RANK का अर्थ है "Nवाँ अलग मान", जिसमें समान वेतन एक ही रैंक साझा करते हैं और कोई अंतराल नहीं होता।
  • RANK अंतराल बनाता है; ROW_NUMBER मानों के बजाय पंक्तियों की गिनती करता है।
  • सहसंबद्ध गिनती = N-1 वाली युक्ति विंडो फ़ंक्शन के बिना यही विचार लागू करती है, लेकिन बड़े पैमाने पर धीमी पड़ती है।

हमेशा उस सीमांत स्थिति का उल्लेख करें जिसमें "N उपलब्ध मानों से बड़ा है"; इसे हम अगले पाठ में हल करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
90
पाठ
360

अक्सर पूछे जाने वाले प्रश्न

क्या “DENSE_RANK से Nवाँ सबसे अधिक मान” पाठ निःशुल्क है?

हाँ—“DENSE_RANK से Nवाँ सबसे अधिक मान” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“DENSE_RANK से Nवाँ सबसे अधिक मान” में मैं क्या सीखूँगा?

Nवें अलग मान तक सामान्यीकरण और डुप्लिकेट संभालना सीखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“DENSE_RANK से Nवाँ सबसे अधिक मान” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. दूसरा सबसे अधिक वेतन: पाँच तरीके
  2. DENSE_RANK से Nवाँ सबसे अधिक मान
  3. प्रति विभाग सबसे अधिक कमाने वाला
  4. Nवाँ मान न होने पर NULL लौटाना
← कोडिंग साक्षात्कार की तैयारी पर वापस जाएँ