题解 | #获取每个部门中当前员工薪水最高的相关信息#
对所有员工的薪水按照salary降序进行1-N的排名
http://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf
#首先要注意自己的知识盲点--order by,order by(列1 desc/asc,列2 desc/asc)的意思是,先按列1进行排序,当列1里面的值有相等值的时候,对这些相等的值按列2进行排序。
#t_rank里面的排名值,可以通过统计比salary大的数据条数作为t_rank的数值,在select后面可以出现select语句
#rank()over()函数,over参数里是order by语句。
select RANK() OVER(order by ColumnX DESC) "Rank", id from TableY;
在TableY中取id字段及生成的Rank字段,用法与ROW_NUMBER类似,但是会进行实际排名,比如 ID=1和ID=2的值为1000,ID=3的值为999,那么RANK()方法得到的Rank字段ID=1和ID=2的排名都为1,ID=3的Rank 排名值为3,Rank会跳过相同的值的排名,默认如果两个值并列第一,则无Rank=2的排名,直接跳到Rank=3。
在TableY中取id字段及生成的Rank字段,用法与ROW_NUMBER类似,但是会进行实际排名,比如 ID=1和ID=2的值为1000,ID=3的值为999,那么RANK()方法得到的Rank字段ID=1和ID=2的排名都为1,ID=3的Rank 排名值为3,Rank会跳过相同的值的排名,默认如果两个值并列第一,则无Rank=2的排名,直接跳到Rank=3。
这也就意味着,排名序号不需要count计算了,用rank就可以了!!