里面有查询的 MySQL 函数

标签 mysql function

我使用这个 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/

相关文章:

php - 这里我的 SQL 语法有什么问题?

php - 仅从数据库获取上周结果

javascript - 定义 function(json) 是否有效,如果是,这意味着什么?

c - 作为函数返回的指针不会像声称的那样被覆盖

MySQL创建表IF NOT EXISTS语法错误

mysql - sql 检查行是否是另一个表的子集

php - 如何使用 PHP 在 MySQL 中显示多行?

c - 使用格式字符串打印返回地址

Javascript,在对象文字中传递一个函数,它是可调用的吗?

c - 在 C 中使用递归函数测试回文