Mysql 两个子查询之间的减法

Mysql 两个子查询之间的减法,mysql,Mysql,我正在尝试减去两个子查询。下面列出了这两个表 COM_PAYMENTS +++++++++++++++++++ tender_id | amount +++++++++++++++++++ 10 | 200 10 | 345 22 | 18 25 | 45 COM_RECEIPTS +++++++++++++++++++ tender_id | amount +++++++++++++++++++ 10 | 10

我正在尝试减去两个子查询。下面列出了这两个表

COM_PAYMENTS

+++++++++++++++++++
tender_id | amount
+++++++++++++++++++
   10     | 200
   10     | 345
   22     |  18
   25     |  45

COM_RECEIPTS

+++++++++++++++++++
tender_id | amount
+++++++++++++++++++
   10     | 10
   10     | 15
   22     | 13
我试图在查询中实现的是,首先我需要找到COM_付款和COM_收据的投标ID金额之和,并且COM_付款总额需要从COM_收据总额中减去

Example: The out put in this case should be:

tender_id | Total

    10      520 (200 + 345 = 545, 10 + 15 = 25, 545 - 25= 520)
    22      5   (18 - 13)
    25      45 ( Since COM_PAYMENTS doesnt have any recrds)
这是我尝试过的,但如果COM_收据中有数据,则只显示总数,而其他数据则不减去显示空白:

(select
SUM(com_payments.amount)
FROM com_payments
WHERE view_sales_report.tender_id = com_payments.tender_id) -
(select
SUM(com_receipts.rec_amt)
FROM com_receipts
WHERE view_sales_report.tender_id = com_receipts.tender_id)

也许你需要这样的东西:

SELECT tender_id, SUM(amount) AS amount
FROM (
    SELECT tender_id, SUM(amount) AS amount
    FROM COM_PAYMENTS
    GROUP BY tender_id
    UNION ALL
    SELECT tender_id, SUM(amount * -1) AS amount
    FROM COM_RECEIPTS
    GROUP BY tender_id
  ) a
GROUP BY tender_id  

向前看,我建议您只有一个表,它记录所有交易——付款和收款——有一个交易id和一列记录交易类型。

我认为这里有太多的查询。不起作用:想象一下,在com_收据中有一行投标id=10;金额=-200怎么可能不呢?我们不知道表格是如何填充的是的,我们知道,有了这些,我们只知道表格应该如何填充…@ipiero我认为这在任何情况下都很好。@草莓是的,工会是我的目标;)我同意在缺少主键的情况下,这实际上不是RDBMS意义上的表。不过,我认为我们必须考虑到有人可能会两次提供相同金额的投标。
SELECT SUM(DISTINCT pa.amount)-IFNULL(SUM(DISTINCT re.amount) , 0) FROM com_payments pa
LEFT OUTER JOIN com_receipts re ON pa.`tender_id` = re.`tender_id` GROUP BY pa.tender_id
SELECT SUM(DISTINCT pa.amount)-IFNULL(SUM(DISTINCT re.amount) , 0) FROM com_payments pa
LEFT OUTER JOIN com_receipts re ON pa.`tender_id` = re.`tender_id` GROUP BY pa.tender_id