ROW_NUMBER() là hàm trong MySQL được sử dụng để trả về số thứ tự cho từng hàng, có chia thành nhiều phân vùng.
Cú pháp: ROW_NUMBER() OVER (<partition_definition> <order_definition>)
SELECT t.*, ROW_NUMBER() OVER(PARTITION BY pcol1, pcol2, ... pcolX ORDER BY ocol1, ocol2, ... ocolY) FROM t
Tạo bảng dữ liệu như sau
1. Sắp xếp (theo name) và đánh số thứ tự
select *, row_number() over(order by name) as row_num from person;
2. Chia phân vùng (theo year), sắp xếp (mặc định) và đánh số thứ tự trong từng phân vùng
select *, row_number() over(partition by year) as row_num from person;
3. Chia phân vùng (theo year), sắp xếp (theo name) và đánh số thứ tự trong từng phân vùng
select *, row_number() over(partition by year order by name) as row_num from person;
-------------------------------------
Những cách khác để đánh số thứ tự là dùng biến Session
SET @row_number = 0;
select *, (@row_number:=@row_number + 1) AS row_num from person order by name asc;
hoặc
select *, (@row_number:=@row_number + 1) AS row_num from person, (SELECT @row_number:=0) AS temp ORDER BY name asc;
Link tham khảo https://www.javatpoint.com/mysql-row_number-function