为什么我的最高工资查询有语法错误?

xlpyo6sf  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(275)

问题:
编写一个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 :='
1u4esq0p

1u4esq0p1#

不能以这种方式初始化@i变量。通常,您可以在查询之前用这种方法初始化它 SET 语句,或在查询中,例如: .... FROM Employee, (@i := 0) AS init .... 此外,不能计算结果字段的别名,也不能实际计算任何别名;它不是当前错误的来源,而且函数不会返回该别名;但我觉得值得一提。我很惊讶它竟然没有在第一个错误。

相关问题