sql - 直接使用row_number函数
问题描述
有没有直接使用row_number()
函数的方法?我想找到第二高的薪水
SELECT DISTINCT id
,salary
,depid
,ROW_NUMBER() OVER (
PARTITION BY depid ORDER BY salary DESC
) AS rownum
FROM emp
WHERE rownum = 2;
它给出了一个错误,但是下面的代码工作正常。
SELECT *
FROM (
SELECT DISTINCT id
,salary
,depid
,ROW_NUMBER() OVER (
PARTITION BY depid ORDER BY salary DESC
) AS rownum
FROM emp
) AS t
WHERE t.rownum = 2;
有什么方法可以直接使用row_number()
第一个选项中的函数,这会导致错误?
解决方案
您不能将同一查询的别名用作 where 子句的条件。您也不能在 where 子句中使用窗口查询作为传递条件。
这是一个详细的解释为什么 where 子句中没有窗口函数?. 因此,您需要内部查询之外的另一个查询,并且需要编写子查询。
您可以从以下查询中获得 SQL Server 中第 N 高的薪水。
SELECT TOP 1 salary
FROM (
SELECT DISTINCT TOP N salary
FROM <YourTableNameHere>
ORDER BY salary DESC
) AS TEMP
ORDER BY salary
推荐阅读
- java - 无效的 XPath 表达式:需要令牌
- excel - 将 Chrome 窗口向右移动,将当前 excel 向左移动
- solidity - 拍卖智能合约的编码问题
- c# - 无法弄清楚如何在命名空间中使用 "| Where-Object {$_.Name -like "ada*"}:System.Management.Automation
- android - 为什么我在 Android 中收到“无法删除附加到不同 FragmentManager 的 Fragment”?
- javascript - 当我对 Object.assign() 使用原语时,结果显示为空对象
- javascript - 如何在电子应用程序中打包快递服务器?
- python - Group_by 列特定类型
- javascript - JavaScript - 在对象文字中声明获取属性
- c# - 跳过,包括在内