我有一张这样的桌子:

PARENTREF    TRANSTYPE(BIT(1))    DUEDATE(DateTime)    TOTAL
     2038                    0           2015-01-01     1000
     2038                    1           2015-03-05      500
     2039                    0           2015-01-01     1000
     2040                    0           2015-01-01     1000
     2041                    0           2015-01-01     1000
     2040                    1           2015-04-07      200

我想要一个SELECT查询,对于每个不同的SUM(TOTAL)TRANSTYPE=1中减去SUM(TOTAL)时返回TRANSTYPE=0。我还想在一个单独的列中得到PARENTREFDUEDATEPARENTREF时。可能只有一个TRANSTYPE=0PARENTREF一起使用,这样就不会有问题。换句话说,我应该得到下表:
PARENTREF    DUEDATE(DateTime)    TOTAL
     2038          2015-01-01       500
     2039          2015-01-01      1000
     2040          2015-01-01       800
     2041          2015-01-01      1000

最佳答案

(1-transtype*2)1时是transtype=0的,在-1时是transtype=1的,因此query从totalwheretranstype=1的值中减去total的值。transtype=0忽略max值,因此只选择不null值。

select
    parentref,
    sum((1-transtype*2)*total) as total,
    max(if(transtype=0,duedate,null)) as duedate
from tablename
group by parentref

关于mysql - SQL中总和的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27578088/

10-11 04:43