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

本文详细介绍了如何使用SQL的窗口函数DENSE_RANK()和子查询来实现对员工薪水的降序排名,同时处理相同薪水时的并列情况。通过示例代码展示了两种不同的解题思路,帮助读者理解SQL查询中的排名问题。
摘要由CSDN通过智能技术生成


一、题目

有一个薪水表salaries简况如下:
在这里插入图片描述

对所有员工的薪水按照salary降序进行1-N的排名,要求相同salary并列且按照emp_no升序排列:
在这里插入图片描述

二、解题

1.窗口函数

SELECT emp_no,salary,
DENSE_RANK() OVER(ORDER BY salary DESC) as t_rank
FROM salaries

2.子查询

(1)因为比第一个工资大的工资只有0个,其排名为1,所以需要给

count(DISTINCT s2.salary)+1

(2)因为输出结果要求是1,2,2,3
所以需要对大于该数的值进行去重。

SELECT emp_no,salary,
   (
    SELECT count(DISTINCT s2.salary)+1
    FROM salaries s2
    WHERE s2.salary>s1.salary
   )
FROM salaries s1
ORDER BY salary DESC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值