你能在MySQL的sum函数中添加count函数吗?

时间:2018-04-22 03:10:03

标签: mysql

对MySQL很新;但是,我遇到了一些错误。我正在尝试使用存储过程来告诉我们具有到期余额的发票数量。

所以,如果,greater than 0 ...然后将所有这些发票与余额相加。

如果这些发票的余额为greater than or equal to 30,000,则显示一条消息,其中显示具有余额的发票数量及其总和。

否则,if it is less than 30,000会显示一条消息,指出总余额少于30,000。

感谢您的帮助!

请注意,我现在的代码。它在SUM上给出了错误。有没有办法让我的选择语句更好?

我的代码:

DROP PROCEDURE IF EXISTS test;

DELIMITER //

CREATE PROCEDURE test()
BEGIN
    DECLARE var_balance_due_count INT;
    DECLARE var_balance_due_sum DECIMAL(9,2);

    SELECT
        (invoice_total - payment_total - credit_total) AS balance_due,
        COUNT(invoice_total - payment_total - credit_total) INTO var_balance_due_count,
        SUM(var_balance_due_count) INTO var_balance_due_sum
    FROM
        invoices
    WHERE
        invoice_total - payment_total - credit_total > 0;


    IF var_balance_due_sum >= 30000 THEN
        SELECT CONCAT('There is ', var_balance_due_count, ' invoices.', 'Together their balance due is: $',  var_balance_due_sum) AS message;
    ELSE 
        SELECT CONCAT('Total balance due is less than $30,000.') AS message;
    END IF;
END //

DELIMITER ;

CALL test();

1 个答案:

答案 0 :(得分:2)

问题不在于SUM本身,而是你使用INTO的方式,它应该在所有选择表达式之后。请注意,我不明白你为什么要创建balance_due所以不要这样做。另外,根据我对您的问题的理解,我已经更正了var_balance_due_sum的表达式。所以你的查询应该是:

SELECT
    COUNT(invoice_total - payment_total - credit_total),
    SUM(invoice_total - payment_total - credit_total) 
    INTO var_balance_due_count, var_balance_due_sum