如何解决如何在SQL函数中引用输入?
我有一张这样的桌子:
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
我正在用MysqL编写一个函数,以获取Salary中的第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)更改为1:
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 1
#FETCH NEXT 1 ROWS ONLY
);
END
它可以正常运行。 那么问题是如何在sql函数中引用输入?似乎可以像在其他语言中一样直接将其称为参数。
解决方法
LIMIT参数不能为变量。使用准备好的语句-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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。