MySQL (ก่อน 8.0) ไม่มี ROW_NUMBER() แต่สามารถจำลองได้ด้วย User-defined Variable
ไวยากรณ์
SELECT (@yourVariable := @yourVariable + 1) AS `anyAliasName`, yourColumnName1, yourColumnName2, ...N FROM yourTableName, (SELECT @yourVariable := 0) AS anyAliasName;
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> create table RowNumberDemo (
-> UserId int,
-> UserName varchar(20)
-> );
Query OK, 0 rows affected (0.74 sec)
เพิ่มข้อมูล:
mysql> insert into RowNumberDemo values(10,'John'),(50,'Carol'),(100,'Sam'),(150,'Mike'),(210,'Bob');
ข้อมูล:
+--------+----------+ | UserId | UserName | +--------+----------+ | 10 | John | | 50 | Carol | | 100 | Sam | | 150 | Mike | | 210 | Bob | +--------+----------+
สร้าง Row Number:
mysql> SELECT
-> (@ROW_NUMBER := @ROW_NUMBER + 1) AS `ROW_NUMBER`, UserId, UserName
-> FROM RowNumberDemo, (SELECT @ROW_NUMBER := 0) AS t;
ผลลัพธ์:
+------------+--------+----------+ | ROW_NUMBER | UserId | UserName | +------------+--------+----------+ | 1 | 10 | John | | 2 | 50 | Carol | | 3 | 100 | Sam | | 4 | 150 | Mike | | 5 | 210 | Bob | +------------+--------+----------+
MySQL 8.0+
รองรับ Window Function ROW_NUMBER() OVER (ORDER BY ...) แบบ Native แล้ว:
SELECT ROW_NUMBER() OVER (ORDER BY UserId) AS row_num, UserId, UserName FROM RowNumberDemo;