MySQL में ORDER BY ... DESC LIMIT 1 OFFSET 1 का उपयोग करके दूसरा सबसे बड़ा मान (second maximum) प्राप्त कर सकते हैं।
सिंटैक्स
SELECT * FROM टेबल_नाम ORDER BY कॉलम_नाम DESC LIMIT 1 OFFSET 1;
उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable (Value INT);
2. डेटा डालें
mysql> INSERT INTO DemoTable VALUES(1), (2), (4), (204), (5);
3. सभी मान
mysql> SELECT * FROM DemoTable; +-------+ | Value | +-------+ | 1 | | 2 | | 4 | | 204 | | 5 | +-------+
4. दूसरा अधिकतम
mysql> SELECT * FROM DemoTable
-> ORDER BY Value DESC
-> LIMIT 1 OFFSET 1;
5. परिणाम
+-------+ | Value | +-------+ | 5 | +-------+
व्याख्या
ORDER BY Value DESC- अवरोही क्रम: 204, 5, 4, 2, 1OFFSET 1- पहली पंक्ति (204) छोड़ेंLIMIT 1- अगली एक पंक्ति लें (5)
Nth अधिकतम के लिए सामान्य सूत्र
-- Nth अधिकतम (1-based: 1=अधिकतम, 2=दूसरा अधिकतम...) SELECT * FROM टेबल_नाम ORDER BY कॉलम_नाम DESC LIMIT 1 OFFSET (N-1);
डुप्लिकेट मान होने पर
-- विशिष्ट Nth पंक्ति (डुप्लिकेट सहित) LIMIT 1 OFFSET 1 -- विशिष्ट Nth अलग मान SELECT DISTINCT Value FROM DemoTable ORDER BY Value DESC LIMIT 1 OFFSET 1
प्रदर्शन
- इंडेक्स वाले कॉलम पर बहुत तेज़
- बड़े ऑफसेट के लिए धीमा (OFFSET N को N पंक्तियां छोड़नी पड़ती हैं)
- बड़े N के लिए विंडो फ़ंक्शन (MySQL 8.0+) बेहतर
MySQL 8.0+ विंडो फ़ंक्शन
SELECT Value FROM (
SELECT Value, ROW_NUMBER() OVER (ORDER BY Value DESC) AS rn
FROM DemoTable
) t WHERE rn = 2;