MySQL में DISTINCT, ORDER BY DESC, और LIMIT ... OFFSET का संयोजन उपयोग करके Nth उच्चतम विशिष्ट मान प्राप्त कर सकते हैं।
सिंटैक्स
SELECT DISTINCT कॉलम_नाम FROM टेबल_नाम ORDER BY कॉलम_नाम DESC LIMIT (N-1), 1;
उदाहरण: 3rd उच्चतम अंक (N=3)
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable1594 (Marks INT);
2. डेटा डालें
mysql> INSERT INTO DemoTable1594 VALUES(76), (95), (56), (96), (89);
3. सभी मान (अवरोही)
mysql> SELECT * FROM DemoTable1594 ORDER BY Marks DESC;
+-------+ | Marks | +-------+ | 96 | -- 1st highest | 95 | -- 2nd highest | 89 | -- 3rd highest | 76 | | 56 | +-------+
4. 3rd उच्चतम (N=3 → OFFSET 2)
mysql> SELECT DISTINCT Marks FROM DemoTable1594
-> ORDER BY Marks DESC
-> LIMIT 2, 1;
5. परिणाम
+-------+ | Marks | +-------+ | 89 | +-------+
सामान्य सूत्र
| चाहिए | OFFSET | LIMIT |
|---|---|---|
| 1st उच्चतम (अधिकतम) | 0 | 1 |
| 2nd उच्चतम | 1 | 1 |
| 3rd उच्चतम | 2 | 1 |
| Nth उच्चतम | N-1 | 1 |
DISTINCT का महत्व
DISTINCT के बिना डुप्लिकेट मान होने पर गलत रैंक मिलेगी:
-- डेटा: 100, 100, 90, 80 -- DISTINCT बिना: 1st=100, 2nd=100, 3rd=90 -- DISTINCT साथ: 1st=100, 2nd=90, 3rd=80
MySQL 8.0+: विंडो फ़ंक्शन (बेहतर)
SELECT Marks FROM (
SELECT DISTINCT Marks,
DENSE_RANK() OVER (ORDER BY Marks DESC) AS rnk
FROM DemoTable1594
) t WHERE rnk = 3;
प्रदर्शन
- इंडेक्स वाले कॉलम पर तेज़
- बड़े ऑफसेट के लिए धीमा
- विंडो फ़ंक्शन बड़े N के लिए बेहतर
संबंधित: Nth न्यूनतम
SELECT DISTINCT Marks FROM DemoTable1594 ORDER BY Marks ASC LIMIT (N-1), 1;