ใช้ Subquery ซ้อนหา Max และ Second Max รูปแบบ:
SELECT
(SELECT MAX(salary) FROM emp) AS MaximumSalary,
(SELECT MAX(salary) FROM emp
WHERE salary NOT IN (SELECT MAX(salary) FROM emp)) AS SecondMaximumSalary;
ตัวอย่าง
สร้างตารางพนักงาน 8 คน มี Salary ต่างกัน
mysql> SELECT
-> (SELECT MAX(EmployeeSalary) FROM EmployeeMaxAndSecondMaxSalary) AS MaximumSalary,
-> (SELECT MAX(EmployeeSalary) FROM EmployeeMaxAndSecondMaxSalary
-> WHERE EmployeeSalary NOT IN (SELECT MAX(EmployeeSalary) FROM EmployeeMaxAndSecondMaxSalary))
-> AS SecondMaximumSalary;
ผลลัพธ์:
+---------------+---------------------+
| MaximumSalary | SecondMaximumSalary |
+---------------+---------------------+
| 89990 | 76543 |
+---------------+---------------------+
วิธีอื่น: ใช้ ORDER BY salary DESC LIMIT 1 OFFSET 1 (ดูบทความถัดไป) หรือ Window Function ROW_NUMBER() ใน MySQL 8.0+