我想要一个函数,给定 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/