问题:
编写一个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 :='
答案 0 :(得分:1)
您不能以这种方式初始化@i变量。通常,您可以在查询之前使用这种SET
语句来初始化它,或者在查询中将其初始化为:
.... FROM Employee, (@i := 0) AS init ....
此外,您不能计算结果字段的别名,也不能计算任何别名。它不是当前错误的根源,并且您的函数无论如何不会返回该别名;但我认为这值得注意。 我很惊讶它实际上并没有在那之前犯错。