满足 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函数:计算是不是满足计算值,满足直接计算,如不满足则返回一个固定值?
mysql update,2个表,把第一个表中所有满足条件的字段值(金额),加总到另一个表的总金额里