2016-08-19 25 views
0

Iam試圖減去兩個子查詢。這兩個表如下所列兩個mysql子查詢之間的減法

COM_PAYMENTS 

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

COM_RECEIPTS 

+++++++++++++++++++ 
tender_id | amount 
+++++++++++++++++++ 
    10  | 10 
    10  | 15 
    22  | 13 

試圖在查詢中實現的是什麼IAM首先我需要找到既COM_PAYMENTS和COM_RECEIPTS和COM_PAYMENTS總量的tender_ids量的總和需要從總數中減去COM_RECEIPTS的數量。

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_RECEIPTS只有其表示合計,爲別人它不是減去它的顯示空白:

(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) 

回答

3
SELECT tender_id 
    , SUM(amount) total 
    FROM 
    (SELECT tender_id, amount FROM com_payments 
     UNION ALL 
     SELECT tender_id, amount*-1 FROM com_receipts 
    ) x 
GROUP 
    BY tender_id; 

展望未來,我會建議你只有一個表,其中記錄了所有的TR應付 - 付款和收據 - 帶有一個transaction_id和一個記錄交易類型的列。

+0

不行:想象一下在com_receipts中有一行with tender_id = 10;金額= -200 – ipeiro

+0

怎麼會不?我們對如何填充表格一無所知 – ipeiro

+0

是的,我們這樣做,我們只知道這些表格應該如何填充... – ipeiro

0

也許這樣的事情是什麼您需要:

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 
+0

我想這裏有太多的查詢。 – Strawberry

0
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 
+0

我同意在沒有PRIMARY KEY的情況下,這不是RDBMS意義上的表格。不過,我認爲我們必須考慮到有人可能會兩次提供相同的金額。 – Strawberry