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