gpt4 book ai didi

mysql - 如果条件变为 false,如何将查询结果设置为零

转载 作者:行者123 更新时间:2023-11-29 11:35:29 24 4
gpt4 key购买 nike

我有一个 sql 查询,它返回一个表的三列总计,这是我的查询:

SELECT c.*,  
(select sum(t.incoming) - sum(t.outgoing) from transactions t where t.client_id = c.id and currency = 'Dollar') +
(select sum(t.equal_to_dollar) from transactions t where t.incoming != 0 and currency != 'Dollar' and t.client_id = c.id) -
(select sum(t.equal_to_dollar) from transactions t where t.outgoing != 0 and currency != 'Dollar' and t.client_id = c.id)
as total from clients c

我的问题是,当第二个和第三个条件(内部选择)之一不满足时,它将返回 null 值并导致整个选择返回 null。因为空值不能与任何值相加或相减。
我想知道是否有任何方法可以将其条件评估为 false 的查询结果设置为零,这样它就不会影响整个查询,并且查询将返回满足 where 子句中的条件的那些部分的值。
我不知道当结果很重要并且应该如此准确时,这是一种计算值(value)的好方法吗?
我想提前感谢您的帮助:)

最佳答案

您可以只使用coalesce():

select c.*,  
((select coalesce(sum(t.incoming), 0) - coalesce(sum(t.outgoing), 0) from transactions t where t.client_id = c.id and currency = 'Dollar') +
(select coalesce(sum(t.equal_to_dollar), 0) from transactions t where t.incoming <> 0 and currency <> 'Dollar' and t.client_id = c.id) -
(select coalesce(sum(t.equal_to_dollar), 0) from transactions t where t.outgoing <> 0 and currency <> 'Dollar' and t.client_id = c.id)
) as total
from clients c ;

每个子查询都是没有group by的聚合,因此每个子查询都返回一行——如果没有匹配,则该行的值为NULLCOALESCE() 将其转换为 0。

但是,没有理由需要三个子查询。只需使用单个子查询并使用条件聚合进行计算:

select c.*,  
(select sum(case when currency = 'Dollar'
then coalesce(t.incoming, 0) - coalesce(t.outgoing, 0)
when t.incoming <> 0
then coalesce(t.equal_to_dollar, 0)
when t.outgoing <> 0
then - coalesce(t.equal_to_dollar, 0)
else 0
end)
from transactions t
where t.client_id = c.id
) as total
from clients c ;

关于mysql - 如果条件变为 false,如何将查询结果设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36663803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com