MySQL函数中返回块的限制

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

我正在处理一个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 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返回单个值并将其分配给变量。