Три очка. Во-первых, в более ранних версиях Oracle вы можете использовать оконные функции:
SELECT Salary as SecondHighestSalary
FROM (SELECT e.*,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum
FROM Employee e
) e
WHERE seqnum = 2;
Во-вторых, это не возвращает «вторую по величине зарплату» - при очень разумных интерпретациях фразы - потому что могут быть привязаны самые высокие зарплаты. Если вы действительно хотите получить второй самый высокий оклад (в отличие от оклада человека, второго в списке упорядоченных окладов), тогда используйте RANK()
вместо ROW_NUMBER()
.
В-третьих, у вас есть следующие операторы вставки:
insert into Employee (Id, Salary) values ('1', '100');
И id
, и Salary
объявлены как числовой . Не смешивайте типы! Одинарные кавычки не только не нужны, но и вводят в заблуждение (хотя в данном случае это не вредно):
insert into Employee (Id, Salary)
values (1, 100);