对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();
答案 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