我使用这个 mysql 函数通过传递三个参数来检索列数据的总和。无论 where 子句如何,函数都会返回整列的总和。 我的意思是,函数内的查询的行为就像它没有 where 子句一样,并且该查询在没有函数的情况下使用时工作正常。 这是函数
DELIMITER $$
CREATE FUNCTION calculate_customer_loan(customer_id INT, currency VARCHAR(10), type VARCHAR(10)) RETURNS DOUBLE
BEGIN
DECLARE total DOUBLE;
SELECT SUM(`amount`) INTO total FROM `deals` WHERE `customer_id` = customer_id AND `currency` = currency AND `type` = type;
RETURN total;
END
$$
DELIMITER ;
任何想法! 帮助我。
最佳答案
您遇到参数名称与列名称匹配的问题。列名获胜。
因此,命名您的参数以避免歧义:
DELIMITER $$
CREATE FUNCTION calculate_customer_loan (
in_customer_id INT,
in_currency VARCHAR(10),
in_type VARCHAR(10)
) RETURNS DOUBLE
BEGIN
DECLARE v_total DOUBLE;
SELECT SUM(d.amount) INTO v_total
FROM deals d
WHERE d.customer_id = in_customer_id AND
d.currency = in_currency AND
d.type = in_type;
RETURN v_total;
END
$$
DELIMITER ;
我删除了反引号。它们不是必需的,更重要的是,它们不区分列名和变量名。
关于里面有查询的 MySQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42414688/