2011-02-22 88 views
2

我有兩個mysql表:earningredemptionearning表中的數據將添加到運行餘額中,redemption表中的數據將從該餘額中減去。每個表格有一個hours列和一個amount列。 (這些原因在同一張表中並不是負面的和正面的,有多種原因,但即使有了這些原因,我現在已經意識到這可能是一個糟糕的模式設計,但是......現在我被卡住了用它)。從一個表中減去另一個表中的總和

如何獲得hoursamounts字段的當前餘額?更具體地說,我怎麼寫一個單一的查詢,會給我SUM(earning.hours) - SUM(redemption.hours)SUM(earning.amount) - SUM(redemption.amount),按Common_ID分組?


一些示例數據。每個表格中都有其他字段,但目前我並不關心它們。

Earning: 

+----+-----------+-------+--------+ 
| id | common_id | hours | amount | 
+----+-----------+-------+--------+ 
| 1 | 234  | 1.03 | 15.75 | 
| 2 | 234  | 2.06 | 33.00 | 
| 3 | 237  | 2.11 | 12.29 | 
| 4 | 237  | 3.50 | 18.63 | 
+----+-----------+-------+--------+ 

Redemption: 

+----+-----------+-------+--------+ 
| id | common_id | hours | amount | 
+----+-----------+-------+--------+ 
| 1 | 234  | 2.50 | 30.00 | 
| 2 | 234  | 0.50 | 5.68 | 
| 3 | 237  | 1.00 | 8.00 | 
+----+-----------+-------+--------+ 

Desired result: 

+-----------+---------------+----------------+ 
| common_id | hours_balance | amount_balance | 
+-----------+---------------+----------------+ 
| 234  | 0.09   | 13.07   | 
| 237  | 4.61   | 22.92   | 
+-----------+---------------+----------------+ 
+0

請提供表格定義和樣本數據 – 2011-02-22 18:22:35

+1

您可以在'收益'上不存在`redemption`上的common_id嗎?或相反亦然? – Lamak 2011-02-22 18:33:45

回答

2

您需要單獨執行分組。

SELECT e.Common_ID, 
    SUM(e.hours) - MIN(g.SumHours), 
    SUM(e.amount) - MIN(g.SumAmount) 
FROM earning e JOIN (
    SELECT Common_ID, SUM(hours) SumHours, SUM(amount) SumAmount 
    FROM redemption 
    GROUP BY Common_ID 
) g ON e.Common_ID = g.Common_ID 
GROUP BY Common_ID 

注:爲Lamak指出的那樣,如果你有一個不存在的兩個表中的common_id,你將需要一個LEFT JOIN和可能的另一種UNIONRIGHT JOIN

相關問題