我正在处理一个leetcode问题,该问题要求用户从名为 Employee
带列 Id
以及 Salary
.
给用户的开始代码是
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
);
END
诱惑就是
SELECT e.salary as getNthHighestSalary
FROM employee e
ORDER BY e.salary DESC
LIMIT 1 OFFSET (N-1)
但显然这不管用。成功的查询在返回块外定义另一个变量m=n-1,然后使用 OFFSET M
.
我的问题是:
这里涉及的原则是什么?显然,在返回块中允许执行的操作有一些限制。
一个参考是完全正确的;一些搜索没有任何结果。
2条答案
按热度按时间fcy6dtqo1#
简而言之:你不能使用
offset (N-1)
因为语法不允许(你应该得到一个语法错误)。一般来说,
limit
以及offset
预期实际数字:limit子句可用于约束select语句返回的行数。limit接受一个或两个数值参数,这两个参数都必须是非负整数常量。
尽管在存储过程中存在异常:
在存储程序中,可以使用整数值例程参数或局部变量指定限制参数。
所以你可以在那里使用变量,但不能使用表达式。这就是为什么如果使用预先计算的变量
M
相反。ig9co6j12#
函数返回一个整数,因为您只选择了一个限制为1的值。
包含两行的结果集将产生错误。
我之所以添加确定性是因为mysql需要一个选项
表也不能用作返回值。
如果要返回更多变量,必须在n int之后添加用户定义的变量,这可以在调用函数的seelct中使用