Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用两种不同条件对同一列求和_Mysql_Sql - Fatal编程技术网

Mysql 使用两种不同条件对同一列求和

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

我有一个名为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 = 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