【问题标题】:Can you add a count function within a sum function in MySQL?你可以在 MySQL 的 sum 函数中添加一个 count 函数吗?
【发布时间】:2018-10-02 09:08:21
【问题描述】:

对 MySQL 很陌生;但是,我遇到了一些错误。我正在尝试使用一个存储过程来告诉我们有欠款的发票数量。

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

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

否则,if it is less than 30,000 然后显示一条消息,说总余额小于 30,000。

感谢您的帮助!

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

我的代码:

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();

【问题讨论】:

    标签: mysql


    【解决方案1】:

    问题不在于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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      相关资源
      最近更新 更多