我有两个mysql表:earning
和redemption
。 earning
表中的数据会增加运行余额,redemption
表中的数据会从该余额中减去。每个表都有一个hours
列和一个amount
列。
(有很多原因可以解释为什么这些不是同一个表中的负值和正值,但即使有这些原因,我现在也认识到这可能是一个糟糕的架构设计,但是......现在我已经坚持了它)。
如何获取hours
和amounts
字段的当前余额?更具体地说,我如何编写一个能够给我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 :(得分: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
,可能需要另一个UNION
RIGHT JOIN
}}