SQL中两个表之间的计算

时间:2017-06-18 22:35:20

标签: mysql sql function select

我有两张桌子A和B: 表A

Txn_amt2    rrn     Pan     Stan    Msg_type
22000       7123344 556677  442233  0200
22000       7123344 556677  442233  0200
22000       7123344 556677  442233  0200
22000       7123344 556677  442233  0200
35200       7178866 223344  989898  0200
67000       7199933 667733  343433  0200

表B

Txn_amt1    rrn     Pan     Stan    Msg_type
89000       7123344 556677  442233  0220
35400       7178866 223344  989898  0220
67100       7199933 667733  343433  0220

我需要根据具体情况找到txn_amt1与txn_amt2或sum(txn_amt2)-txn_amt1之差的差异 有两种情况: 1.当表A中的列txn_amt2中存在彼此相等的值时(如表a中22000重复4次),我应该将这些值相加,其中表A的rrn,pan,stan对于重复的值和之后的值相等我必须用表B的Txn_amt1减去总和,其中rrn,pan,stan对于两个表是相等的。 2.当txn_amt2不重复自己时,这意味着该行在表A中只存在一次,我必须用txn_amt2减去txn_amt1,其中两个表的rrn,pan,stan相等。

这是执行查询后我应该期待的结果 diff(txn_amt1 - txn_amt2或sum(txn_amt2)-txn_amt1)

1000
200
100

我需要SQL或查询中的函数。

1 个答案:

答案 0 :(得分:0)

您可以将表A和B相加,然后加入。如果TableB没有重复的行,则不需要求和:

SELECT a.rrn, a.Pan, a.Stan, a.Msg_type, 
  sum(ifnull(b.amt1, 0) - ifnull(a.amt2, 0)) AS amt_diff
FROM (
  SELECT rrn,Pan Stan,Msg_type,sum(Txn_amt2) AS amt2
  FROM tableA GROUP BY 1,2,3,4
) AS a
JOIN (
  SELECT rrn,Pan Stan,Msg_type,sum(Txn_amt1) AS amt1
  FROM tableB GROUP BY 1,2,3,4
) AS b ON a.rrn = b.rrn AND a.Stan = b.Stan AND a.Msg_type = b.Msg_type
GROUP BY 1,2,3,4