添加一些列,减去另一列

时间:2019-09-17 07:40:22

标签: mysql sql

我有两个表insert1received1  在insert1表中具有列,列名称为recharge_account。 收到的表只有一列,列名是received_amount

我希望将recharge_ammount - total received_amount合计为应缴费用。

recharge_Account       Received_Amount     dues
500              -        400               100

SELECT
    SUM(Account_recharge) AS `Total Recharge`,
    SUM(Amount_Received) AS `Total Received`,
    SUM(Account_recharge) - SUM(Amount_Received) AS dues
FROM insert1 i1
INNER JOIN received1 r1

我无法精确计算。

3 个答案:

答案 0 :(得分:1)

您只需要一个连接条件,例如ON i1.id = r1.ins_idCOALESCE()函数即可对空值进行操作:

SELECT
    SUM(COALESCE(Account_recharge,0)) AS `Total Recharge`,
    SUM(COALESCE(Amount_Received,0)) AS `Total Received`,
    SUM(COALESCE(Account_recharge,0)) - SUM(COALESCE(Amount_Received,0)) AS dues
FROM insert1 i1
JOIN received1 r1 ON i1.id = r1.ins_id

答案 1 :(得分:0)

我会推荐union allgroup by

SELECT SUM(ir.Account_recharge) AS `Total Recharge`,
       SUM(ir.Amount_Received) AS `Total Received`,
       SUM(ir.Account_recharge) - SUM(ir.Amount_Received) AS dues
FROM ((SELECT Account_recharge, NULL as Amount_Received
       FROM insert1 i1
      ) UNION ALL
      (SELECT NULL as Account_recharge, Amount_Received
       FROM received1 r1
      ) 
     ) ir

实际上,CROSS JOIN也可以工作:

SELECT SUM(i.Account_recharge) AS `Total Recharge`,
       SUM(r.Amount_Received) AS `Total Received`,
       SUM(i.Account_recharge) - SUM(r.Amount_Received) AS dues
FROM (SELECT SUM(Account_recharge) as Account_recharge
      FROM insert1 i1
     ) i CROSS JOIN
     (SELECT SUM(Amount_Received) as Amount_Received
      FROM received1 r1
     ) r;

在这种情况下,关键是您需要在加入 之前进行汇总。

答案 2 :(得分:0)

据我了解,您不需要任何加入。
您可以对每列求和,并在子查询中返回2列以减去它们:

SELECT t.`Total Recharge`, t.`Total Received`,
  t.`Total Recharge` - t.`Total Received`  AS dues
FROM (
  SELECT
    (SELECT SUM(Account_recharge) FROM insert1) AS `Total Recharge`,
    (SELECT SUM(Amount_Received) FROM received1) AS `Total Received`
) AS t