Mysql SQL中两个表之间的计算

Mysql SQL中两个表之间的计算,mysql,sql,function,select,Mysql,Sql,Function,Select,我有两张表A和表B: 表A 表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的差异,或者根据情况找出sumtxn_amt2-txn_amt1的差异 有两种情况:

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

表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的差异,或者根据情况找出sumtxn_amt2-txn_amt1的差异 有两种情况: 1.当在表a的txn_amt2列上有22000个相互相等的值重复4次时,我应对这些值求和,其中表a的rrn、pan、stan对于重复的值相等,然后我必须用表B的txn_amt1减去总和,其中rrn、pan、stan对于两个表相等。 2.当txn_amt2不重复时,这意味着这一行在表A中只存在一次,我必须用txn_amt2减去txn_amt1,其中两个表的rrn,pan,stan相等

这是执行查询后我应该期望的结果 difftxn_amt1-txn_amt2或sumtxn_amt2-txn_amt1

1000
200
100

我需要SQL或query中的函数。

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

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

谢谢你的回答。我编辑查询,这是应该的方式:选择a.rrn,a.Pan,a.Stan,sumifnullb.amt1,0-ifnulla.amt2,0作为amt_diff,从组中选择rrn,Pan,Stan,sumTxn_amt2作为amt2,按1,2,3作为联接从组中选择rrn,Pan,Stan,sumTxn_amt1作为amt1,从组中选择1,2,3作为b,按a.rrn=b.rrn=b.Stan=b.Stan,按1,2,3作为组
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