Почему мой запрос на самую высокую зарплату имеет синтаксическую ошибку? - PullRequest
0 голосов
/ 12 ноября 2018

Вопрос:

Напишите запрос SQL, чтобы получить n-ю самую высокую зарплату из таблицы Employee.

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

Например, с учетом приведенной выше таблицы Employee,n-й наивысший оклад, где n = 2, равен 200. Если n-го наивысшего оклада нет, запрос должен вернуть ноль.

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

Мой запрос:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN(

    SELECT NT.Salary as CONCAT('getNthHighestSalary','(',N,')')
    FROM (SET @i := 0;
          SELECT (@i := @i + 1) as Index, Id, Salary
          FROM Employee
          ORDER BY Salary DESC) AS NT
    WHERE NT.Index = N);
END

Ошибка:

Line 5: SyntaxError: near '('getNthHighestSalary','(',N,')')
    FROM (SET @i := 0;
          SELECT (@i :='

1 Ответ

0 голосов
/ 12 ноября 2018

Вы не можете инициализировать переменную @i таким способом.Как правило, вы либо инициализируете его перед запросом с помощью оператора SET такого типа, либо внутри запроса, например: .... FROM Employee, (@i := 0) AS init ....

Кроме того, вы не можете вычислить псевдоним поля результата или фактически любой псевдоним;это не источник вашей текущей ошибки, и ваша функция все равно не вернет этот псевдоним;но я думал, что стоит отметить. Я удивлен, что на самом деле это не было ошибкой.

...