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

描述

有一个薪水表salaries简况如下:

对所有员工的薪水按照salary降序进行1-N的排名,要求相同salary并列,且按照emp_no升序排列:

/* 
题目:对所有员工的薪水按照salary降序进行1-N的排名,
要求相同salary并列,且按照emp_no升序排列:*/

-- 方法一:窗口函数
select s.emp_no,s.salary,dense_rank() over(order by s.salary desc) as t_rank
from salaries s
where to_date='9999-01-01'
-- order by s.emp_no asc


-- 方法二:不使用窗口函数,用非等值连接和自连接

select s1.emp_no,s1.salary,COUNT(DISTINCT s2.salary) AS t_rank
from salaries s1, salaries s2
where  s1.salary <= s2.salary
group by 
   s1.salary,s1.emp_no
order by 
   s1.salary desc

-- 方法三:不使用窗口函数,用子查询
   select s1.emp_no,s1.salary,
   (select 
    COUNT(DISTINCT s2.salary) AS t_rank 
    from salaries s2 
    where s1.salary <= s2.salary)
   from salaries s1
   order by 
   s1.salary desc
    */

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值