नेस्टेड सबक्वेरी के साथ दूसरा सर्वोच्च मान खोजना
सबसे बड़ा मान खोजने के बाद, उससे छोटा सबसे बड़ा मान दूसरा सर्वोच्च होता है। इसके लिए नेस्टेड MAX() सबक्वेरी का उपयोग करें।
टेबल और डेटा
mysql> CREATE TABLE DemoTable(
Marks INT
);
Query OK, 0 rows affected (1.34 sec)
mysql> INSERT INTO DemoTable VALUES(78); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable VALUES(88); Query OK, 1 row affected (0.10 sec) mysql> INSERT INTO DemoTable VALUES(67); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable VALUES(76); Query OK, 1 row affected (0.25 sec) mysql> INSERT INTO DemoTable VALUES(98); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable VALUES(86); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable VALUES(89); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable VALUES(99); Query OK, 1 row affected (0.12 sec)
सभी रिकॉर्ड
mysql> SELECT * FROM DemoTable;
+-------+ | Marks | +-------+ | 78 | | 88 | | 67 | | 76 | | 98 | | 86 | | 89 | | 99 | +-------+ 8 rows in set (0.00 sec)
दूसरा सबसे बड़ा अंक प्राप्त करने की क्वेरी
mysql> SELECT Marks FROM DemoTable
WHERE Marks = (
SELECT MAX(Marks) FROM DemoTable
WHERE Marks < (SELECT MAX(Marks) FROM DemoTable)
);
परिणाम:
+-------+ | Marks | +-------+ | 98 | +-------+ 1 row in set (0.03 sec)
तर्क: आंतरिक सबक्वेरी MAX(Marks) = 99 देती है। मध्य सबक्वेरी 99 से छोटा अधिकतम = 98 देती है। बाहरी क्वेरी 99 वाली पंक्ति लौटाती है।
आधुनिक विकल्प (MySQL 8.0+): SELECT DISTINCT Marks FROM DemoTable ORDER BY Marks DESC LIMIT 1 OFFSET 1; अधिक पठनीय और कुशल है।