满足 2 个条件的 SQL SUM 值

Posted

技术标签:

【中文标题】满足 2 个条件的 SQL SUM 值【英文标题】:SQL SUM values where 2 conditions are met 【发布时间】: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?您想要返回一个值(总计)还是三个(借方、贷方、总计)? 【参考方案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。

【讨论】:

以上是关于满足 2 个条件的 SQL SUM 值的主要内容,如果未能解决你的问题,请参考以下文章

excel函数:计算是不是满足计算值,满足直接计算,如不满足则返回一个固定值?

SQL中where条件如何判断某个字段有没有

mysql update,2个表,把第一个表中所有满足条件的字段值(金额),加总到另一个表的总金额里

在PL/SQL中 使用 case when 语句求两个条件合并统计的平均值

SQL查询满足两个条件的重复记录只显示2条记录的方法

Excel计数满足多个条件的唯一不同值