sql - 使用 row_number 函数获取第二高值
问题描述
我正在写一个查询以获得公司中个人的第二高薪水。这是我正在处理的具体问题:
https://leetcode.com/problems/second-highest-salary/
这是我已经尝试编写的代码。
select Salary as SecondHighestSalary from
(select Salary, row_number() over (order by Salary desc) as rank
from Employee)
where rank = 2
我收到错误消息"[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near ')'. (102) (SQLExecDirectW)"
。
作为一个后续问题,NULL
如果数据库中没有第二个薪水(即数据库是一行),我怎样才能让它返回或另一条消息?
解决方案
您需要子查询的别名:
select Salary as SecondHighestSalary
from (select Salary,
row_number() over (order by Salary desc) as rank
from Employee
) e
where rank = 2;
请注意,这将返回第二个薪水。如果最高薪水有联系,则返回最高薪水。如果你想要第二个,那么你可以使用dense_rank()
.
或者:
select distinct salary
from employee e
offset 1 row fetch first 1 row only;
推荐阅读
- unit-testing - 如何在 Kotlin 中测试 tailrec 函数?
- c++ - 如何在 QApplication 中应用 QLibraryInfo 中加载的库和插件配置?
- twilio - Twilio :(Error: 63015) Channel Sandbox 只能向已加入 Sandbox 的电话号码发送消息
- android - PWA App - 如何避免向用户推送通知权限?
- python - 我正在尝试使用 numpy.interp 从 pandas 数据帧中插入一个值,但它不断返回错误的插值
- javascript - 如何确保内联 jQuery 脚本在 HTML 页面中的所有内容中最后执行?
- nlp - NLP - 最佳文档嵌入库
- python - 克鲁斯卡尔复杂性
- wordpress - 使用 WordPress Multisite 创建新博客时克隆演示网站
- swift - PWA 中的额外边距 - 无法拉伸整个高度