使用mysql用户定义的函数来计算美元金额。错误1064(42000)
问题描述:
我正在尝试创建一个mysql函数来计算商店中前五位客户所花费的总额,但我一直收到以下语法错误。什么导致了错误? 错误:使用mysql用户定义的函数来计算美元金额。错误1064(42000)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'FUNCTION costofbestbuyers (totalspent DECIMAL)
RETURNS DOUBLE
BEGIN
DECLA' at line 1
功能:
DELIMITER //
CREATE FUNCTION topfivespenders (totalspent DECIMAL)
RETURNS DOUBLE
BEGIN
DECLARE totalspent DOUBLE DEFAULT 0;
SELECT sum(ordercost) AS totalspent
FROM customer c JOIN orders o
ON c.customerID = o.cID
GROUP BY o.cID
ORDER BY totalspent desc
LIMIT 5;
RETURN totalspent;
END; //
答
语法不正确设置的sum(ordercost)
值成totalspent
变量。
试试这个。希望这可以工作。
DELIMITER //
CREATE FUNCTION topfivespenders (totalspent DECIMAL)
RETURNS DOUBLE
BEGIN
DECLARE totalspent DOUBLE DEFAULT 0;
SELECT sum(ordercost) INTO totalspent
FROM customer c JOIN orders o
ON c.customerID = o.cID
GROUP BY o.cID
ORDER BY totalspent desc
LIMIT 5;
RETURN totalspent;
END//
DELIMITER //
答
既然你得到了一个语法错误,那么你会尝试在phpMyAdmin或API中执行此操作。您不需要在这些环境中执行DELIMITER技巧。当您使用mysql客户端执行SQL语句或SQL脚本时,您只需要DELIMITER。看到这个问题的答案:Creating functions in phpMyAdmin - Error: access denied you need the super privilege for this operation
除此之外,我看到你的函数的一些其他问题。如果您没有成功定义函数,您还没有遇到这些问题。
MySQL存储的函数只能返回一个标量,而不是结果集。您试图返回最多五个分组总和的结果集。
你的ORDER BY子句是由你给没有价值,除了默认的0值的局部变量
totalspent
这意味着你的ORDER BY子句将在一个恒定值,这使得每行的排序顺序并列顺序排序。这就好像你没有排序顺序一样,MySQL将以某种任意的方式排序行。