Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
MySQL + SQL · Lesson 140

Nth Highest Salary निकालें

एक classic interview सवाल

"Nth सबसे ऊँची salary ढूँढो" सबसे ज़्यादा पूछे SQL interview सवालों में से एक है। यह sorting, LIMIT, OFFSET और duplicates की आपकी समझ जाँचता है। इसे हल करने के कुछ साफ़ तरीके हैं — LIMIT/OFFSET, और आधुनिक MySQL पर DENSE_RANK।

💡 Salaries descending sort कीजिए, फिर Nth सबसे ऊँची पहुँचने को पहली N-1 distinct values skip कीजिए।

दूसरा सबसे ऊँचा

SELECT DISTINCT salary
FROM employees
ORDER BY salary DESC
LIMIT 1 OFFSET 1;
+--------+ | salary | +--------+ | 70000 | +--------+

Salaries ऊँची से नीची sort कीजिए, फिर OFFSET 1 top वाली skip करता है, और LIMIT 1 अगली लौटाता है — दूसरी सबसे ऊँची।

OFFSET से Nth सबसे ऊँचा

-- Nth सबसे ऊँची: OFFSET is N-1
SELECT DISTINCT salary
FROM employees
ORDER BY salary DESC
LIMIT 1 OFFSET 2;   -- 3rd सबसे ऊँची

Nth सबसे ऊँची को, OFFSET N-1 इस्तेमाल कीजिए। 3rd सबसे ऊँची पाने को, offset 2। यह सामान्य pattern कोई भी rank ढूँढता है जो आप चाहें।

Duplicate salaries संभालना

DISTINCT महत्वपूर्ण है। अगर तीन employees सब top salary कमाएँ, वे तीन rows भरेंगे, और offset उसी salary के भीतर skip करेगा। DISTINCT बराबर salaries को एक में collapse करता है, तो "दूसरी सबसे ऊँची" का मतलब दूसरी distinct salary है, जो लोग आमतौर पर चाहते हैं।

DENSE_RANK तरीका

SELECT salary FROM (
    SELECT salary,
        DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
    FROM employees
) t
WHERE rnk = 2;   -- 2nd सबसे ऊँची

MySQL 8.0+ में, DENSE_RANK() हर salary को rank देता है, बराबर salaries को rank साझा करके बिना gaps। rnk = N filter करना बहुत साफ़ पढ़ता है और ties स्वाभाविक रूप से संभालता है।

Subquery तरीका

SELECT MAX(salary)
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);

ख़ासकर दूसरी सबसे ऊँची को, यह classic subquery maximum के नीचे सबसे ऊँची salary ढूँढती है। यह N=2 को साफ़ है, हालाँकि LIMIT/OFFSET या DENSE_RANK किसी भी N को बेहतर scale होते हैं।

आम गलतियाँ

  • DISTINCT भूलना। Duplicate salaries फिर offset तोड़ती हैं।
  • OFFSET में off-by-one। Nth सबसे ऊँची OFFSET N-1 इस्तेमाल करती है।
  • पुराने MySQL पर DENSE_RANK इस्तेमाल करना। Window functions को MySQL 8.0+ चाहिए।
  • DESC भूलना। इसके बिना आप Nth सबसे नीची पाते हैं, ऊँची नहीं।

सारांश

  • Nth सबसे ऊँची: DISTINCT के साथ ORDER BY salary DESC LIMIT 1 OFFSET N-1।
  • दूसरी सबसे ऊँची OFFSET 1 इस्तेमाल करती है।
  • DISTINCT tied salaries collapse करता है ताकि ranks सही हों।
  • DENSE_RANK (MySQL 8.0+) salaries rank करता है और साफ़ पढ़ता है।
  • MAX वाली subquery दूसरी सबसे ऊँची साफ़ संभालती है।

आगे, data group और rank कीजिए GROUP BY और HAVING से, या duplicates हटाइए deleting duplicate rows में।

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

MySQL में Nth सबसे ऊँची salary कैसे ढूँढूँ?
एक आम तरीका SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET N-1; है। Descending sort करके N-1 rows skip करना Nth सबसे ऊँची पर पहुँचता है। DISTINCT इस्तेमाल कीजिए ताकि बराबर salaries duplicates न बनाएँ।
दूसरी सबसे ऊँची salary कैसे ढूँढूँ?
LIMIT को offset 1 के साथ इस्तेमाल कीजिए: SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET 1;। यह top salary skip करके अगली distinct लौटाता है, जो दूसरी सबसे ऊँची है।
Nth सबसे ऊँची salary ढूँढते समय DISTINCT क्यों?
DISTINCT बिना, अगर कई employees top salary साझा करें, वे कई rows घेरते हैं और offset गलत value पर पहुँचता है। DISTINCT बराबर salaries collapse करता है ताकि Nth सबसे ऊँची distinct salary हो, duplicate नहीं।
DENSE_RANK तरीका क्या है?
DENSE_RANK() हर salary को rank देता है, बराबर salaries को बिना gaps वही rank देकर। फिर आप Nth सबसे ऊँची पाने को WHERE rank = N filter करते हैं। यह MySQL 8.0 में उपलब्ध है और बहुत साफ़ है।
LIMIT OFFSET और DENSE_RANK में क्या अंतर है?
DISTINCT वाला LIMIT OFFSET सरल है और सारे MySQL versions में चलता है। DENSE_RANK एक window function (MySQL 8.0+) है जो rows rank करता है और जटिल मामलों को ज़्यादा साफ़ पढ़ता है, पर दोनों Nth सबसे ऊँची salary सही ढूँढते हैं।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicDuplicate Rows Delete करें आपकी प्रगति: 140 / 151 (93%) · Lesson 141 / 151 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें