为什么我查询的最高薪水有语法错误?

时间:2018-11-12 20:18:16

标签: mysql syntax-error

问题:

编写一个SQL查询以从Employee表中获取第n个最高薪水。

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

例如,给定上面的Employee表,其中n = 2的第n个最高薪水是200。如果没有n个最高薪水,则查询应返回null。

+------------------------+
| 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 :(得分:1)

您不能以这种方式初始化@i变量。通常,您可以在查询之前使用这种SET语句来初始化它,或者在查询中将其初始化为: .... FROM Employee, (@i := 0) AS init ....

此外,您不能计算结果字段的别名,也不能计算任何别名。它不是当前错误的根源,并且您的函数无论如何不会返回该别名;但我认为这值得注意。 我很惊讶它实际上并没有在那之前犯错。