mysql - 在MySql自定义函数中选择最后一项

标签 mysql limit

我想要一个函数,给定 N 返回按 Sales 列排序的 Products 表中的第 N-1 个产品名称

产品表:

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

关于mysql - 在MySql自定义函数中选择最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59255433/

相关文章:

mysql - SQL 查找商品级别的折扣

java - java堆大小的硬限制

c# - 如何使用c#中的程序检查堆栈内存的大小

count - MongoTemplate 限制查询问题

mySQL根据不同的WHERE不同的ORDER BY

mysql - 如何将数据库的多个输出作为 SQL 中的不同列返回

MySQL:使用 "ON"匹配不精确的值

mysql - 带 Pivot 的存储过程不返回结果结构,而是返回零值

mysql - 如何查询超过2亿行的表?

Linux : How to LIMIT incoming (concurrent) connection COUNT?