Как получить 2-ю самую высокую зарплату?
Это уже второй раз, когда я столкнулся с этим же вопросом в автономном тесте закрытого собеседования, чтобы получить 2-ю самую высокую зарплату.
Это команды SQL для создания таблицы и ее заполнения.
CREATE TABLE [dbo].[Employee]( [Name] [nchar](10) NOT NULL, [Salary] [int] NOT NULL ) ON [PRIMARY] GO INSERT INTO Employee ([Name], [Salary]) VALUES ('Peter', 5000); INSERT INTO Employee ([Name], [Salary]) VALUES ('Penny', 6000); INSERT INTO Employee ([Name], [Salary]) VALUES ('Jackson', 7000); INSERT INTO Employee ([Name], [Salary]) VALUES ('Jenny', 8000);
Что я уже пробовал:
Мой внутренний запрос выбирает верхние 2, упорядоченные по убыванию. Внешний запрос выбирает верхний 1, упорядоченный по возрастанию. Вот так я получаю 2-ю по величине зарплату. Мне было интересно, есть ли более элегантный способ сделать это.
SELECT TOP(1) [Name], [Salary] FROM ( SELECT TOP (2) [Name], [Salary] FROM [Test].[dbo].[Employee] ORDER BY [Salary] DESC ) AS Emp ORDER BY [Salary];
Вывод будет правильным следующим образом
Name Salary Jackson 7000
Есть ли лучший способ сделать этот запрос?