要做一个合格的DBA专员,就要好好写sql。今天力扣看到这一题,才知道还有排名函数,记录一下。
1)ROW_NUMBER
row_number的用途非常的广泛。一般可以实现web程序的分页,他会为查询出来的每一行记录都生成一个序号,一次排序且不会重复。
select s.Score, ROW_NUMBER() OVER(order by s.Score desc) as 'Rank' from Scores s
2)RANK
rank函数用于返回结果集的分区内每行的排名,这个是有间隙的。
select RANK() OVER(order by [UserId]) as rank,* from [Order]
这边就是根据UserId划分的区域,同一个区域排名是一样的,不同的就是会累积了
3)DENSE_RANK
这个和RANK 差不多,无非就是不累计而已,这就是力扣那道题想要实现的结果。
select s.Score,DENSE_RANK() OVER(order by s.Score desc) as 'Rank' from Scores s
4)NTILE
ntile函数可以对序号进行分组处理。
select NTILE(4) OVER(order by [SubTime] desc) as ntile,* from [Order]
1、每组的记录数不能大于它上一组的记录数,即编号小的桶放的记录数不能小于编号大的桶。也就是说,第1组中的记录数只能大于等于第2组及以后各组中的记录数。
2、所有组中的记录数要么都相同,要么从某一个记录较少的组(命名为X)开始后面所有组的记录数都与该组(X组)的记录数相同。也就是说,如果有个组,前三组的记录数都是9,而第四组的记录数是8,那么第五组和第六组的记录数也必须是8。
感觉这个有点烦的 好难好难



