Mysql 如何在SQL函数中引用输入?

Mysql 如何在SQL函数中引用输入?,mysql,function,Mysql,Function,我有一张这样的桌子: +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ 我正在用mySQL编写一个函数,以获得工资中第n大的值。 以下是函数: CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN RETURN ( # Write your M

我有一张这样的桌子:

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
我正在用mySQL编写一个函数,以获得工资中第n大的值。 以下是函数:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
    # Write your MySQL query statement below.
    select DISTINCT Salary 
    FROM Employee 
    ORDER BY Salary  DESC
    LIMIT 1 offset (N - 1)
    #FETCH NEXT 1 ROWS ONLY
    
  );
END
但是我在(N-1)附近得到了一个错误。

如果我将(N-1)更改为1:

它运行正常。
所以问题是如何在SQL函数中引用输入?似乎它可以像在其他语言中一样直接作为参数调用。

限制参数不能是变量。使用准备好的语句-在该语句中,LIMIT参数可以取自变量。但函数使用存储过程中不允许使用动态SQL:

CREATE PROCEDURE getNthHighestSalary(N INT)
BEGIN
    SET @sql := 'SELECT DISTINCT Salary 
                 INTO @output
                 FROM Employee 
                 ORDER BY Salary  DESC
                 LIMIT 1 OFFSET ?';
    PREPARE stmt FROM @sql;
    SET @output := N-1;
    EXECUTE stmt USING @output;
    DROP PREPARE stmt;
    SELECT @output;
END

在SQL查询中引用变量之前,我似乎需要声明并设置一个变量:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
  RETURN (
    # Write your MySQL query statement below.
    select DISTINCT Salary 
    FROM Employee 
    ORDER BY Salary  DESC
    LIMIT 1 OFFSET M
    #FETCH NEXT 1 ROWS ONLY 
  );
END

我得到的错误不是一个问题的描述。你看到的错误是什么?您看到的确切错误消息是什么?@KenWhite这似乎是语法错误。它只是说它在(N-1)附近。没有其他特定信息…我正在使用leetcode上的SQL面板。@KenWhite错误消息已附加。有什么线索吗?谢谢你的回答,不幸的是,我正在处理leetcode问题,这需要我写一个函数……不过还是要谢谢你!
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
  RETURN (
    # Write your MySQL query statement below.
    select DISTINCT Salary 
    FROM Employee 
    ORDER BY Salary  DESC
    LIMIT 1 OFFSET M
    #FETCH NEXT 1 ROWS ONLY 
  );
END