对所有员工的当前(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就是个别名
可以自己建一个简单的表感受一下