mysql - 在MySql自定义函数中选择前一个
问题描述
我想要一个函数,给定 N 返回按列Products
排序的表中的第 N-1 个产品名称Sales
表Products
:
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说:
在存储的程序中,
LIMIT
可以使用整数值的例程参数或局部变量来指定参数。
换句话说,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
推荐阅读
- coldfusion - 无法从 cfinvoke 语句中找到组件
- python - 试图消除 runTest 方法要求
- c# - 如何序列化松弛块?在 C# 中
- tensorflow - 向 CNN 层添加额外的内核,同时保持为其他内核学习的权重
- react-native - mapStateToProps 不更新组件
- ios - 如何将滑块值增加 15?
- python - 在创建生成器以从 isPrime 函数打印出数字时需要帮助
- javascript - 等待内部函数等待并执行,然后继续执行
- javascript - 循环遍历缺少元素的数组
- javascript - 如何在requirejs模块中使用变量变量