Как получить третью самую высокую зарплату и вместе с именем сотрудника из таблицы в SQL Server - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть таблица с именем "tblEmployee" .., в которой два столбца обозначены как "EmpName" и "Salary" ... 5 строк в этой таблице:

| EmpName | Salary |
|---------|--------|
| john    |  80000 |
| ann     |  20000 |
| james   |  40000 |
| smith   |  90000 |
| rudolph |  30000 |

Я хочу получить третью самую высокую зарплату из таблицы tblEmployee вместе с именем сотрудника. то есть мой вывод должен быть Джеймс, 40000 в этом случае.

спасибо заранее.

Ответы [ 3 ]

4 голосов
/ 05 декабря 2011

Для 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;

Чтобы учесть возможность связей, вместо функции ROW_NUMBER() можно указать DENSE_RANK().

3 голосов
/ 05 декабря 2011

Вы можете сделать:

SELECT TOP 1 * 
FROM (SELECT TOP 3 EmpName, Salary FROM tblEmployees ORDER BY Salary DESC) AS E 
ORDER BY E.Salary ASC

, то есть выбрать 3 лучших сотрудников по зарплате, затем изменить их порядок и выбрать 1. 1. 1004 *

0 голосов
/ 20 декабря 2015

Во-первых, я хочу указать в ответе выше, если используется номер строки, который не будет работать, если в таблице есть повторяющиеся записи. В конечном итоге вам придется использовать другое, иначе приведенный выше запрос не даст правильного результата.

Есть много способов достичь той же функциональности. Если вам просто нужно найти максимальную зарплату, вы можете использовать

Select Max(Salary) from Employees

SQL-запрос для поиска 2-й наивысшей зарплаты в таблице сотрудников с использованием подзапроса

Select Max(Salary) from Employees where Salary < (Select Max(Salary) from Employees)

SQL-запрос для поиска n-й наивысшей зарплаты в таблице сотрудников с использованием подзапроса

 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.

SQL-запрос для поиска n-й наивысшей зарплаты в таблице сотрудников с использованием CTE

 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

Для получения 3-й Высшей зарплаты в таблице сотрудников

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

Более подробную информацию об этом можно найти в моем блоге. Как найти самую высокую зарплату с помощью SQL-запроса

...