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

MySQL: หาเงินเดือน Top 3 ด้วย LIMIT และ OFFSET

การหาค่า Top-N ด้วย ORDER BY LIMIT OFFSET

เรียงจากมากไปน้อย (DESC) แล้วใช้ LIMIT 1 OFFSET n หาค่าอันดับที่ n+1

ตัวอย่าง: ตาราง EmployeeSalary

mysql> create table DemoTable867(EmployeeSalary int);
Query OK, 0 rows affected (0.64 sec)
mysql> insert into DemoTable867 values(63737);
mysql> insert into DemoTable867 values(899833);
mysql> insert into DemoTable867 values(23644);
mysql> insert into DemoTable867 values(89393);
mysql> insert into DemoTable867 values(534333);
mysql> insert into DemoTable867 values(889322);

Top 1 (สูงสุด)

mysql> select distinct(EmployeeSalary) from DemoTable867 
order by EmployeeSalary DESC LIMIT 1;

ผลลัพธ์: 899833

Top 2 (อันดับ 2)

mysql> select distinct(EmployeeSalary) from DemoTable867 
order by EmployeeSalary DESC LIMIT 1 OFFSET 1;

ผลลัพธ์: 889322

Top 3 (อันดับ 3)

mysql> select distinct(EmployeeSalary) from DemoTable867 
order by EmployeeSalary DESC LIMIT 1 OFFSET 2;

ผลลัพธ์: 534333

คำสั่งรวม: Top 3 พร้อมกัน

mysql> select distinct(EmployeeSalary) from DemoTable867 
order by EmployeeSalary DESC LIMIT 3;

⚠️ หมายเหตุเกี่ยวกับ DISTINCT

  • DISTINCT ใช้เพื่อไม่ให้นับซ้ำถ้ามีเงินเดือนเท่ากันหลายคน
  • ถ้าต้องการ "Top 3 คน" ไม่ใช่ "Top 3 ระดับเงินเดือน" ให้เอา DISTINCT ออก

MySQL 8.0+: ใช้ Window Function

SELECT EmployeeSalary
FROM (
    SELECT EmployeeSalary, 
           ROW_NUMBER() OVER (ORDER BY EmployeeSalary DESC) as rn
    FROM DemoTable867
) t
WHERE rn <= 3;

สรุป

ใช้ ORDER BY salary DESC LIMIT 3 หา Top 3 ใช้ LIMIT 1 OFFSET n หาอันดับที่ n+1 ใส่ DISTINCT ถ้าต้องการค่าที่ไม่ซ้ำ