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