ROW_NUMBER() เป็น Window Function ที่เพิ่มเข้ามาตั้งแต่ MySQL 8.0 ใช้สำหรับกำหนดลำดับรันนัมเบอร์ให้กับแถวข้อมูล
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE rowNumberDemo (
FirstName VARCHAR(100)
);
INSERT INTO rowNumberDemo VALUES ('john'), ('john'), ('Bob'), ('Smith');
2. ใช้ ROW_NUMBER() กำหนดลำดับ
SELECT
ROW_NUMBER() OVER (ORDER BY FirstName) AS RowNumberSequence,
FirstName
FROM rowNumberDemo
ORDER BY FirstName;
3. ผลลัพธ์
+-------------------+-----------+
| RowNumberSequence | FirstName |
+-------------------+-----------+
| 1 | Bob |
| 2 | john |
| 3 | john |
| 4 | Smith |
+-------------------+-----------+
คุณสมบัติสำคัญ
- สั่งลำดับอัตโนมัติ: เริ่มจาก 1 และเพิ่มทีละ 1
- รองรับ PARTITION BY: สามารถรีเซ็ตลำดับในแต่ละกลุ่มได้
- ต้องมี ORDER BY: ใน OVER clause เพื่อกำหนดลำดับ
ตัวอย่างเพิ่มเติม: ใช้กับ PARTITION BY
SELECT
FirstName,
ROW_NUMBER() OVER (PARTITION BY FirstName ORDER BY FirstName) AS RowNum
FROM rowNumberDemo;
จะได้ลำดับ 1, 2 สำหรับ 'john' และ 1 สำหรับ 'Bob' และ 'Smith' แยกกัน