Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

หาคะแนนอันดับ 2 (Second Largest) ใน MySQL ด้วย Subquery

การหาค่าอันดับ 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+ รองรับ)