首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总共有两列不工作

总共有两列不工作
EN

Stack Overflow用户
提问于 2011-05-22 11:39:16
回答 3查看 161关注 0票数 1

我想从慈善金额中得到总数,慈善金额是0减去慈善金额1的和。

代码语言:javascript
复制
SELECT SUM(Amount) - (SELECT SUM(Amount) 
                        FROM Transactions 
                       WHERE (Charity = 1))
  FROM Transactions 
 WHERE (Charity = 0)

此查询运行,但不会给我正确的结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-22 12:19:36

将所有值视为正数:

代码语言:javascript
复制
SELECT SUM(ABS(Amount)) - (SELECT SUM(ABS(Amount)) 
                        FROM Transactions 
                       WHERE (Charity = 1))
  FROM Transactions 
 WHERE (Charity = 0)

但负面交易是否应该被视为正面交易,这一点令人严重怀疑。如果此表中存在合法的负值事务,则可能应将它们视为负值(与原始查询中一样),或将其排除在外:

代码语言:javascript
复制
SELECT SUM(Amount) - (SELECT SUM(Amount) 
                        FROM Transactions 
                       WHERE (Charity = 1) AND Amount > 0)
  FROM Transactions 
 WHERE (Charity = 0) AND Amount > 0

不确定sqlite中有哪些可用的工具。在标准SQL中,我可能会将其重写为:

代码语言:javascript
复制
SELECT
    COALESCE(SUM(CASE WHEN Charity=0 THEN Amount END),0) -
    COALESCE(SUM(CASE WHEN Charity=1 THEN Amount END),0)
FROM Transactions
WHERE
    Charity in (0,1) AND
    Amount > 0

(或用于ABS版本的类似转换)

票数 2
EN

Stack Overflow用户

发布于 2011-05-22 11:52:08

如果这有帮助,请尝试。

代码语言:javascript
复制
select a.sum1 - b.sum2
from
(SELECT  SUM(Amount) as sum1 FROM Transactions WHERE (Charity = 0)) A,
(SELECT  SUM(Amount) as sum2 FROM Transactions WHERE (Charity = 1)) B
票数 1
EN

Stack Overflow用户

发布于 2011-05-22 11:53:20

尝试下面的(我希望这在SQLite中有效):

代码语言:javascript
复制
SELECT (SELECT  SUM(Amount) FROM Transactions WHERE (Charity = 0)) - 
       (SELECT  SUM(Amount) FROM Transactions WHERE (Charity = 1))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6085870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档