การหาค่าอันดับ 2 สูงสุดด้วย Subquery 巢狀
วิธีหนึ่งในการหาค่าที่มีค่าสูงสุดอันดับ 2 (Second Largest) คือการใช้ Subquery 巢狂 (Nested Subquery) เพื่อหาค่าสูงสุด แล้วหาค่าสูงสุดที่น้อยกว่าค่านั้น
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Marks INT);
Query OK, 0 rows affected (1.34 sec)
mysql> INSERT INTO DemoTable VALUES(78);
mysql> INSERT INTO DemoTable VALUES(88);
mysql> INSERT INTO DemoTable VALUES(67);
mysql> INSERT INTO DemoTable VALUES(76);
mysql> INSERT INTO DemoTable VALUES(98);
mysql> INSERT INTO DemoTable VALUES(86);
mysql> INSERT INTO DemoTable VALUES(89);
mysql> INSERT INTO DemoTable VALUES(99);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+
| Marks |
+-------+
| 78 |
| 88 |
| 67 |
| 76 |
| 98 |
| 86 |
| 89 |
| 99 |
+-------+
8 rows in set (0.00 sec)
คำสั่งหาคะแนนอันดับ 2
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)
คำอธิบาย
- Subquery ในสุด:
SELECT MAX(Marks) FROM DemoTable→ ได้ 99 (ค่าสูงสุด) - Subquery กลาง:
SELECT MAX(Marks) FROM DemoTable WHERE Marks < 99→ ได้ 98 (ค่าสูงสุดที่น้อยกว่า 99) - คำสั่งหลัก: หา Marks ที่เท่ากับ 98
- วิธีอื่นที่ทันสมัยกว่า: ใช้
ORDER BY Marks DESC LIMIT 1 OFFSET 1(MySQL 8.0+ รองรับ)