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