1. ROW_NUMBER()
排序值相同时序号不同,依次排序且不会重复,注意使⽤row_number函数时必须要⽤over⼦句选择对某⼀列进⾏排序才能⽣成序号。
其基本原理是先使⽤over⼦句中的排序语句对记录进⾏排序,然后按照这个顺序⽣成序号。
over⼦句中的order by⼦句与SQL语句中的order by⼦句没有任何关系,这两处的order by 可以完全不同rank函数怎么用
2. RANK()
rank函数⽤于分区内的排名,排序值相同时序号⼀样,但为跳跃排序(⽐如两个第⼀名后⾯是第三名)
3. DENSE_RANK()
类似RANK(), 排序值相同时序号⼀样,但为连续排序(⽐如两个第⼀名后⾯是第⼆名)
4. NTILE(n)
n: 代表分多少组,是⾃动进⾏分组 (每组的记录数不能⼤于它上⼀组的记录数)
⼀个图表⽰⼏个函数的区别:
总结:
在使⽤排名函数的时候需要注意:
1、排名函数必须有包含 ORDER BY 的 OVER ⼦句。
2、分组内从1开始排序。
常⽤语法格式:
1. ROW_NUMBER OVER(partition by … order by … desc):⽆并列,相同名次顺序排列
2. RANK OVER(partition by … order by … desc):有并列,跳跃排序,有两个第⼆名时后边跟着的是第四名
3. DENSE_RANK OVER(partition by … order by … desc):有并列,连续排序,有两个第⼆名时仍然跟着第三名
4. NTITLE(组数) OVER(partition by … order by … desc)
发布评论