Всего две колонки не работают - PullRequest
1 голос
/ 22 мая 2011

Я хочу получить сумму из суммы, в которой благотворительность равна 0, минус сумму суммы, в которой благотворительность равна 1.

SELECT SUM(Amount) - (SELECT SUM(Amount) 
                        FROM Transactions 
                       WHERE (Charity = 1))
  FROM Transactions 
 WHERE (Charity = 0)

Этот запрос выполняется, но не даст мне правильных результатов.

Ответы [ 3 ]

2 голосов
/ 22 мая 2011

Рассматривая все значения как положительные:

SELECT SUM(ABS(Amount)) - (SELECT SUM(ABS(Amount)) 
                        FROM Transactions 
                       WHERE (Charity = 1))
  FROM Transactions 
 WHERE (Charity = 0)

Но серьезно сомнительно, что отрицательные транзакции должны рассматриваться так же, как положительные.Если в этой таблице на законных основаниях присутствуют отрицательные транзакции, то их, вероятно, следует рассматривать как отрицательные (как в исходном запросе) или исключать:

SELECT SUM(Amount) - (SELECT SUM(Amount) 
                        FROM Transactions 
                       WHERE (Charity = 1) AND Amount > 0)
  FROM Transactions 
 WHERE (Charity = 0) AND Amount > 0

Не уверен, какие средства доступны в sqlite.В стандартном SQL я бы, вероятно, переписал это как:

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 версии)

1 голос
/ 22 мая 2011

Попробуйте следующее (надеюсь, это действительно в SQLite):

SELECT (SELECT  SUM(Amount) FROM Transactions WHERE (Charity = 0)) - 
       (SELECT  SUM(Amount) FROM Transactions WHERE (Charity = 1))
1 голос
/ 22 мая 2011

Попробуйте, если это поможет.

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
...