SQL排名问题(薪资,成绩等排序问题)

SQL排名问题(薪资,成绩等排序问题)
题目来源
牛客:https://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf?tpId=82&&tqId=29775&rp=1&ru=/ta/sql&qru=/ta/sql/question-ranking
在这里插入图片描述

select emp_no,salary ,dense_rank() over (order by salary desc) as rank
from salaries
order by  rank asc,emp_no asc

拓展

sql四大排名函数

1、ROW_NUMBER()

解释:当结果出现薪水相同的时候也不进行并列排序,只是123456按数据增加序号,不能用于排名,一般用于分页查询

select emp_no,salary ,ROW_NUMBER() over (order by salary desc) rank
from salaries
order by  rank asc,emp_no asc

在这里插入图片描述

2、rank()
解释:可以进行跳跃性的薪资排名。比如两人并列第二,直接跳过第三名,如下图结果:

select emp_no,salary ,rank() over (order by salary desc) rank
from salaries
order by  rank asc,emp_no asc

在这里插入图片描述
3、dense_rank()
解释:用于不跳跃的薪资排名。如下图结果:

select emp_no,salary ,dense_rank() over (order by salary desc) rank
from salaries
order by  rank asc,emp_no asc

在这里插入图片描述
4、NTILE()
按序号分组;用于一组数分成几个小组
例1

select emp_no,salary ,ntile(4) over (order by salary desc) rank
from salaries
order by  rank asc,emp_no asc

实际输出
在这里插入图片描述
例2

select emp_no,salary ,ntile(3) over (order by salary desc) rank
from salaries
order by  rank asc,emp_no asc

实际输出:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43889487/article/details/121101515