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

ฟังก์ชัน RANK() ใน MySQL (Window Function)

RANK() เป็น Window Function (MySQL 8.0+) ให้ Rank ต่อแถวใน Partition สามารถ Tie ได้ (ค่าเท่ากัน Rank เดียวกัน ข้าม Rank ถัดไป)

สร้างตารางและข้อมูล

mysql> CREATE TABLE RankDemo (id INT);
mysql> INSERT INTO RankDemo VALUES (1), (3), (3), (4), (5);

ใช้ RANK()

mysql> SELECT 
    ->   id,
    ->   RANK() OVER (ORDER BY id) AS Ranking
    -> FROM RankDemo;

ผลลัพธ์:

+------+---------+
| id   | Ranking |
+------+---------+
| 1    | 1       |
| 3    | 2       |
| 3    | 2       |  -- Tie: Rank 2 ซ้ำ 2 ครั้ง
| 4    | 4       |  -- ข้าม Rank 3 ไป 4 ทันที
| 5    | 5       |
+------+---------+

ฟังก์ชัน Ranking อื่นๆ

Functionพฤติกรรม Tieตัวอย่าง (1,3,3,4,5)
RANK()Same Rank, Skip Next1, 2, 2, 4, 5
DENSE_RANK()Same Rank, No Skip1, 2, 2, 3, 4
ROW_NUMBER()Always Unique1, 2, 3, 4, 5

ใช้ PARTITION BY (Rank ภายในกลุ่ม)

SELECT 
  department, 
  employee, 
  salary,
  RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;
หมายเหตุ: Window Functions ต้อง MySQL 8.0+ ไม่ทำงานใน 5.7 ต้องใช้ Variable/Subquery แทน (ซับซ้อนและช้ากว่า)