题解 | #对所有员工的薪水按照salary降序进行1-N的排名#

对所有员工的薪水按照salary降序进行1-N的排名

http://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf

-- 多出了一个排名t_rank,此题为知识盲区 -- 使用dense_rank /* 这道题目考察的是SQL窗口函数(OLAP函数)中用于排序的专用窗口函数用法 但是由于关系数据库提供支持OLAP用途功能时间不长 还有一部分DBMS不支持这个新功能(比如MYSQL) 下面介绍三种用于进行排序的专用窗口函数:

1、RANK() 在计算排序时,若存在相同位次,会跳过之后的位次。 例如,有3条排在第1位时,排序为:1,1,1,4······

2、DENSE_RANK() 这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。 例如,有3条排在第1位时,排序为:1,1,1,2······

3、ROW_NUMBER() 这个函数赋予唯一的连续位次。 例如,有3条排在第1位时,排序为:1,2,3,4······

窗口函数用法: <窗口函数> OVER ( [PARTITION BY <列清单> ] ORDER BY <排序用列清单> ) */ 方法一: select emp_no,salary, dense_rank() over (order by salary desc) as t_rank from salaries where to_date='9999-01-01'; 方法二: SELECT s1.emp_no, s1.salary, (SELECT COUNT(DISTINCT s2.salary) FROM salaries s2 WHERE s2.to_date = '9999-01-01' AND s2.salary >= s1.salary) AS rank -- 去重:计算并列排名 FROM salaries s1 WHERE s1.to_date = '9999-01-01' ORDER BY s1.salary DESC;

全部评论

相关推荐

点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务