MySQL函数中返回块的限制
我正在处理一个LeetCode,它要求用户从一个名为Employee的表中返回第n个最高工资,该表包含Id和salary列 给用户的开始代码是MySQL函数中返回块的限制,mysql,sql,sql-order-by,sql-function,sql-limit,Mysql,Sql,Sql Order By,Sql Function,Sql Limit,我正在处理一个LeetCode,它要求用户从一个名为Employee的表中返回第n个最高工资,该表包含Id和salary列 给用户的开始代码是 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN RETURN ( # Write your MySQL query statement below. ); END 诱惑是把类似的东西 SELECT e.salary as getNthHigh
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,然后使用偏移量M
我的问题:
这里涉及的原则是什么?显然有一些
关于允许在返回块内执行哪些操作的限制
推荐信完全可以;一些搜索没有产生任何结果
DELIMITER //
CREATE FUNCTION getNthHighestSalary2(N INT) RETURNS INT
DETERMINISTIC
BEGIN
RETURN
(SELECT salary
FROM employee
ORDER BY salary DESC
LIMIT 1 OFFSET N);
END//
DELIMITER ;
函数返回一个整数,因为您只选择了一个限制为1的值
包含两行的结果集将产生错误
我之所以添加确定性是因为mysql需要一个选项
此外,表不能用作返回值
如果要返回更多变量,则必须在N INT之后添加用户定义变量,这可以在调用函数的SEELCT中使用。简而言之,这里不能使用偏移量N-1,因为语法不允许。您应该会得到一个语法错误
一般情况下,除实际数量外:
LIMIT子句可用于约束SELECT语句返回的行数。LIMIT接受一个或两个数值参数,它们必须都是非负整数常量
尽管在存储过程中存在异常:
在存储程序中,可以使用整数值例程参数或局部变量指定限制参数
因此,您可以在那里使用变量,但不能使用表达式。这就是为什么如果使用预先计算的变量M,它会起作用。是的,这是一个有趣的问题,因为您有一个查询,它返回一条记录和一列,所以resultset实际上是一个值。因此,我猜这是mysql将select结果视为resultset的一个组件,即使结果是单个值。更有趣的是,对于SET语句,您可以在其中使用select statemsnt返回单个值并将其分配给变量。