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

หาเงินเดือนสูงสุดและอันดับ 2 ด้วย Subquery ใน MySQL

ใช้ 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+