Select MySql 自定义函数中的前一个

Select one before last in MySql custom function

我想要一个函数,它给定 N returns 来自 Products table 的第 N-1 个产品名称,按 Sales

排序

Products Table:

CREATE TABLE Products(
    ID int NOT NULL,
    Name varchar(255) NOT NULL,
    Sales int NOT NULL,
    PRIMARY KEY (ID)
);

我当前的函数定义:

CREATE FUNCTION getName(X INT) RETURNS varchar(255)
BEGIN
  RETURN (
      SELECT 
        Name
      FROM Products
      ORDER BY Sales
      LIMIT 1 OFFSET X - 1
  );
END

但它在 X - 1 附近给我一个语法错误。如何将减号运算符与自定义函数参数一起使用。对于我的用例,我需要在函数内部而不是外部进行否定。 (运行 mysql 5.7).

tldr:

为什么 OFFSET X - 1 抛出语法错误,有什么替代方法?

https://dev.mysql.com/doc/refman/8.0/en/select.html 说:

Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables.

换句话说,LIMIT 和 OFFSET 不接受像 X - 1.

这样的表达式

你可以这样做:

CREATE FUNCTION getName(X INT) RETURNS varchar(255)
READS SQL DATA
BEGIN
  DECLARE local_offset INT;
  SET local_offset = X - 1;
  RETURN (
      SELECT
        Name
      FROM Products
      ORDER BY Sales
      LIMIT 1 OFFSET local_offset
  );
END