Mysql 使用两种不同条件对同一列求和
我有一个名为Order的表,其模式为Mysql 使用两种不同条件对同一列求和,mysql,sql,Mysql,Sql,我有一个名为Order的表,其模式为 user_id, state amount 11 success 100 11 FAILED 10 11 FAILED 10 11 success 17 状态可以有两个值(成功/失败) 我想在state=“SUCCESS”时获取sum(amount)–state=“FAILED”时获取sum(amount) 表示成功时的差额总额-失败时的差额总额 我可以在两个查询中解决这个问题 A = se
user_id, state amount
11 success 100
11 FAILED 10
11 FAILED 10
11 success 17
状态可以有两个值(成功/失败)
我想在state=“SUCCESS”时获取sum(amount)–state=“FAILED”时获取sum(amount)
表示成功时的差额总额-失败时的差额总额
我可以在两个查询中解决这个问题
A = select id, sum(amount) when state = "SUCCESS"
B = select id, sum(amount) when state = "FAILED"
解决方案将是A-B。
有什么方法可以在单个sql查询中实现这一点吗?当
select user_id,sum(case when state = 'SUCCESS' then amount else 0 end)-sum(case when state = 'FAILED' then amount else 0 end)
from table group by user_id
使用条件聚合:
select id,
sum(case when state = 'SUCCESS' then amount else - amount end) as total
from t
where state in ('SUCCESS', 'FAILED')
group by id;
我假设您希望每个
id
得到此总和,而不是表中的总和。缺少end
的case表达式?@jarlh。非常感谢。
select sum(case when state = "SUCCESS" then amount else o end) -
sum(case when state = "FAILED" then amount else o end)
from tbl
group by userid