对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

对所有员工的当前(to_date=‘9999-01-01’)薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

在这里插入图片描述

select a.emp_no,a.salary,count(distinct b.salary)as rank  
from salaries as a , salaries as b 
where a.salary<=b.salary
and a.to_date='9999-01-01' 
and b.to_date='9999-01-01'
group by a.emp_no
order by a.salary desc

在这里插入图片描述
这个关键在于where语句这里 a.salary<=b.salary
同一个表复用
salaries别名b,salaries别名a
先对b表排序,然后取count并去重--------现在得出的结果是有多少不同的个工资
然后用 a.salary<=b.salary 先将a表排序
然后比较a.salary<=b.salary 就是每个a.salary去b.salary里面比较
比如 比94409<= 的有94409,94409,94692 因为b表去重了,所以count(b.salary)为2
最后要有group by 分一下组,不然只会输出一条数据
其实通过where语句出的count其实就是排名—至于rank就是个别名
可以自己建一个简单的表感受一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值