mysql 8.0 窗口函数之序号函数
1. ROW_NUMBER()
定义:ROW_NUMBER()函数作用是将select查询到的数据进行排序,每一条数据加一个序号,一般多用于分页查询。
select *, ROW_NUMBER() over(order by score desc) 'rank' from sc;
2.RANK()
定义:RANK()函数可以对某一个字段进行排名,排序产生相同的数据时,序号相同,并且在后续能够加上相同的数量(能够跳过排名)
select *, rank() over(order by score desc) 'rank' from sc;
3.DENSE_RANK()
定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,但是在遇到相同时不会跳过排名
select *, DENSE_RANK() over(order by score desc) 'rank' from sc
4.NTILE()
定义:NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的’分区’一样,分为几个区,一个区会有多少个。
select *, NTILE(2) over(order by score desc) 'rank' from sc;
select *, NTILE(4) over(order by score desc) 'rank' from sc
分组:Partition By
用在over()函数中,作用与group by类似。可以用作分组排名
-- 查询每一科成绩的分数排名
select *, Rank() over(Partition By CID order by score desc) 'rank' from sc