Sql server 如何从sql server中的表中检索第三高工资和员工姓名
我有一个名为“tblEmployee”的表。其中有两列是“EmpName”和“Salary”。。。 本表中的5行为:Sql server 如何从sql server中的表中检索第三高工资和员工姓名,sql-server,greatest-n-per-group,Sql Server,Greatest N Per Group,我有一个名为“tblEmployee”的表。其中有两列是“EmpName”和“Salary”。。。 本表中的5行为: | EmpName | Salary | |---------|--------| | john | 80000 | | ann | 20000 | | james | 40000 | | smith | 90000 | | rudolph | 30000 | 我想从tblEmployee表中检索第三高工资以及员工姓名。 i、 e.在这种情况下,
| EmpName | Salary |
|---------|--------|
| john | 80000 |
| ann | 20000 |
| james | 40000 |
| smith | 90000 |
| rudolph | 30000 |
我想从tblEmployee表中检索第三高工资以及员工姓名。
i、 e.在这种情况下,我的输出应该是james,40000
提前感谢。您可以:
SELECT TOP 1 *
FROM (SELECT TOP 3 EmpName, Salary FROM tblEmployees ORDER BY Salary DESC) AS E
ORDER BY E.Salary ASC
i、 e.按薪资选择前3名员工,然后按顺序倒序选择前1名 对于SQL Server 2005+:
WITH cteRowNums AS (
SELECT EmpName, Salary,
ROW_NUMBER() OVER(ORDER BY Salary DESC) AS RowNum
FROM tblEmployee
)
SELECT EmpName, Salary
FROM cteRowNums
WHERE RowNum = 3;
考虑到可能的联系,您可以用
densite\u RANK()
函数替换ROW\u NUMBER()
函数。如果使用了行号,我想在上面的回答中指出的第一件事是,如果表中存在重复记录,行号将不起作用。您将不得不使用distinct语句,否则上述查询将无法生成正确的结果
有许多方法可以实现相同的功能。如果你只需要找到最高工资,那么你可以使用
Select Max(Salary) from Employees
SQL查询,使用子查询查找员工表中第二高的薪资
Select Max(Salary) from Employees where Salary < (Select Max(Salary) from Employees)
SELECT TOP 1 SALARY
FROM (
SELECT DISTINCT TOP N SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC
) RESULT
ORDER BY SALARY
// Replace the N with the highest number which you need to find.
使用CTE查询雇员表中第n个最高工资的SQL查询
WITH RESULT AS
(
SELECT SALARY,
DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSERANK
FROM EMPLOYEES
)
SELECT TOP 1 SALARY
FROM RESULT
WHERE DENSERANK = N
获得员工表中第三高的工资
WITH RESULT AS
(
SELECT SALARY,EmpName,
DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSERANK
FROM EMPLOYEES
)
SELECT TOP 1 SALARY,EmpName
FROM RESULT
WHERE DENSERANK = 3
你可以在我的博客上找到更多的细节