【问题标题】:SQL SUM values where 2 conditions are met满足 2 个条件的 SQL SUM 值
【发布时间】:2014-01-21 05:17:03
【问题描述】:

我正在尝试创建一个计算每个月的贷方和借方的查询。这些值在名为 SUM 的列中,每条记录都有一个字段说明它是贷方还是借方(ex_type)。我已经设法得到所有字段的总和(尽管它也不正确 - 因为我只是对所有值求和,无论是贷方还是借方)。

SELECT sum(sum) as total FROM acc where month='$month'

但我不知道怎么做信用卡和借记卡

所以,总结一下...我想将以下两个查询合并为一个。

1. Select sum(sum) as Debit from acc where ex_type='Debit' and month='$month'
2. Select sum(sum) as Credit from acc where ex_type='Credit' and month='$month'

所以,非常感谢任何帮助。

【问题讨论】:

  • 这是mysql还是sql-server?您想要返回一个值(总计)还是三个(借方、贷方、总计)?

标签: mysql sql sql-server select


【解决方案1】:

CASE试试这个

Select sum(CASE WHEN ex_type='Debit' THEN `sum` ELSE 0 END) as Debit,
sum(CASE WHEN ex_type='Credit' THEN `sum` ELSE 0 END) as Credit FROM ...

【讨论】:

    【解决方案2】:

    这应该可行:

    Select sum(d.sum) as Debit, 
      (Select sum(c.sum) from acc c where c.ex_type='Credit' and c.month='$month') as Credit
    from acc d where d.ex_type='Debit' and d.month='$month'
    

    但是,如果您提供有关其他字段的更多详细信息,则可以将内部联接到同一张表中,这可能会更有效。

    【讨论】:

      【解决方案3】:

      可能重复的帖子:

      SUM() based on a different condition to the SELECT

      试试这个:

      Select 
         SUM(CASE WHEN ex_type='Debit' THEN `sum` ELSE 0 END) as Debit,
         SUM(CASE WHEN ex_type='Credit' THEN `sum` ELSE 0 END) as Credit
      FROM acc 
      Where etc...
      

      【讨论】:

      • 我看过那个帖子,但我觉得有点不同
      【解决方案4】:

      我不是 MySQL 专家,但您可能想尝试以下方法

      SELECT 
        SUM(CASE WHEN ex_type='Debit' THEN sum ELSE 0 END CASE) as SumOfDebit,
        SUM(CASE WHEN ex_type='Credit' THEN sum ELSE 0 END CASE) as SumOfCredit,
      FROM acc
      WHERE
        month = '$month'
      

      如果 CASE 语句没有按预期工作,MySQL reference 5.0 会处理 CASE 语句

      【讨论】:

        【解决方案5】:
        SELECT
            SUM(sum) as total
            SUM(IF(ex_type='Debit',sum,0)) Debit
            SUM(IF(ex_type='Credit',sum,0)) Credit
        FROM acc 
        WHERE month='$month'
        

        【讨论】:

          【解决方案6】:

          最简单(也是最酷)的方法是:

          SELECT 
            SUM((ex_type='Debit') * sum) Debit,
            SUM((ex_type='Credit') * sum) Credit,
          FROM acc
          WHERE month = '$month'
          

          这是可行的,因为在 mysql 中,true 为 1,false 为 0。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-28
            • 1970-01-01
            • 2020-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多