Получить вторую самую высокую зарплату, вернуть ноль, если нет второй самой высокой - PullRequest
3 голосов
/ 23 июня 2019

Необходимо вернуть NULL, если:
- В таблице меньше 2 строк
- Нет второго по величине оклада, потому что у всех одинаковая зарплата

Кажется, все, что я смотрючтобы быть нацеленным на более старые версии Sql Server

DECLARE @find int = (Select COUNT(*) from Employee);

IF (@find = 1)
    select null as 'SecondHighest'
else
    select Salary as 'SecondHighest' 
    from Employee
    order by Salary desc
    offset 1 rows fetch next 1 rows only;

Мне удалось вернуть ноль, если есть менее 2 столбцов, хотя я думаю, что может быть лучший способ сделать это.Однако я не могу решить вторую проблему:
«Второй по величине зарплаты нет, потому что у всех одинаковая зарплата»

Ответы [ 2 ]

5 голосов
/ 23 июня 2019

Вот аналогичный подход к @alx (который был хорош и прост, кстати, +1), но будет проще обобщить, чтобы выбрать n-ю самую высокую зарплату:

SELECT MAX(Salary)
FROM
(
  SELECT Salary, DENSE_RANK() OVER(ORDER BY Salary DESC) AS Rank
  FROM Employee
) E
WHERE (Rank = 2);
3 голосов
/ 23 июня 2019

Посмотрите на этот подход: http://sqlfiddle.com/#!9/dfb2cf/3

Вот запрос:

select max(Salary) from Employee where Salary < (select max(Salary) from Employee);

А вот и данные:

create table Employee (Id int, Salary int);
insert into Employee values
(1, 100),
(2, 200),
(3, 300);

Запрос выводит 200, который является правильным ответом. Я думаю, это относится и к SQL-серверу.

Для граничного случая с одной записью выводится null, то есть одна строка с null внутри, а не ноль строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...