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

เพิ่มคอลัมน์ลำดับที่ (Row Number) ในผลลัพธ์ MySQL ด้วย ROW_NUMBER()

ตั้งแต่ MySQL 8.0 รองรับ Window Function ROW_NUMBER() ซึ่งสามารถสร้างหมายเลขลำดับ (Rank) ให้กับแถวในผลลัพธ์ได้โดยไม่ต้องใช้ตัวแปรหรือ Subquery ซับซ้อน

รูปแบบคำสั่ง

SELECT column, ROW_NUMBER() OVER (ORDER BY sort_column) as Rank FROM table;

ตัวอย่างการใช้งาน

สร้างตารางคะแนน:

mysql> create table DemoTable1342 (Score int);
mysql> insert into DemoTable1342 values(80),(98),(78),(89);

ข้อมูลต้นฉบับ:

+-------+
| Score |
+-------+
| 80    |
| 98    |
| 78    |
| 89    |
+-------+

คำสั่งเพิ่ม Rank เรียงคะแนนมากไปน้อย

mysql> select Score, row_number() over() as `Rank` from DemoTable1342 order by Score DESC;

ผลลัพธ์

+-------+------+
| Score | Rank |
+-------+------+
| 98    | 1    |
| 89    | 2    |
| 80    | 3    |
| 78    | 4    |
+-------+------+

คำอธิบายเพิ่มเติม:

  • ROW_NUMBER() OVER () ใช้การจัดลำดับตาม ORDER BY ของ Query หลัก (ที่นี่คือ ORDER BY Score DESC)
  • สามารถระบุ OVER (PARTITION BY group_col ORDER BY sort_col) เพื่อ Reset ลำดับในแต่ละกลุ่ม
  • Window Functions อื่นๆ: RANK(), DENSE_RANK(), NTILE(), LAG(), LEAD()
  • MySQL 5.7 หรือเก่ากว่า: ต้องใช้ตัวแปร SET @rownum=0; SELECT @rownum:=@rownum+1 AS rank, ...