首页 > 解决方案 > 如何引用 SQL 函数中的输入?

问题描述

我有一张这样的桌子:

+----+--------+
| 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 :

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 函数中引用输入?它似乎可以像我们在其他语言中一样直接作为参数调用。

标签: mysqlfunction

解决方案


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

小提琴


推荐阅读