วิธีหาค่าที่สองมากที่สุด (Second Largest) ใน MySQL โดยไม่ใช้ LIMIT
ใช้ Subquery หาค่าสูงสุด แล้วหาค่าสูงสุดที่น้อยกว่าค่านั้น
SELECT MAX(yourColumn) FROM yourTable WHERE yourColumn < (SELECT MAX(yourColumn) FROM yourTable);
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มตัวเลข:
mysql> create table DemoTable (Number int); mysql> insert into DemoTable values(78); mysql> insert into DemoTable values(67); mysql> insert into DemoTable values(92); mysql> insert into DemoTable values(98); mysql> insert into DemoTable values(88); mysql> insert into DemoTable values(86); mysql> insert into DemoTable values(89);
ข้อมูลทั้งหมด:
+--------+ | Number | +--------+ | 78 | | 67 | | 92 | | 98 | | 88 | | 86 | | 89 | +--------+
คิวรีหาค่าที่ 2 มากที่สุด:
mysql> SELECT MAX(Number) FROM DemoTable WHERE Number < (SELECT MAX(Number) FROM DemoTable);
+-------------+ | MAX(Number) | +-------------+ | 92 | +-------------+
วิธีอื่นๆ:
- ใช้ LIMIT (ง่ายกว่า):
SELECT Number FROM DemoTable ORDER BY Number DESC LIMIT 1,1 - ใช้ DISTINCT + LIMIT:
SELECT DISTINCT Number FROM DemoTable ORDER BY Number DESC LIMIT 1,1(กรณีมีค่าซ้ำ) - ใช้ Variable: ใช้ User-defined Variable นับลำดับ
ข้อควรระวัง: หากค่าสูงสุดมีหลายแถว (Duplicate) วิธี Subquery นี้จะคืนค่าที่ 2 มากที่สุดที่แตกต่าง (Distinct) ซึ่งมักเป็นสิ่งที่ต้องการ | หากต้องการรวม Duplicate ให้ใช้วิธี LIMIT