Sql server 如何从sql server中的表中检索第三高工资和员工姓名

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.在这种情况下,

我有一个名为“tblEmployee”的表。其中有两列是“EmpName”和“Salary”。。。 本表中的5行为:

| 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
你可以在我的博客上找到更多的细节