从表中减去金额之和与另一个表中的金额之和

时间:2013-07-04 09:04:49

标签: java sql

我得到了错误的sql结果,它有一个双减去金额的值。

我想从另一张表中金额总和的表中减去金额总和。

这是bet_tbl(第一张表)数据。仅检查bet_Number“11”。 bet_tbl的金额总和为2000.见下文。

bet_tbl

enter image description here

这是recover_tbl(第二表)数据。 recover_tbl的金额总和为100。

见下文。

enter image description here

最终结果我希望在用bet_tbl.Amount减去recover_tbl.Amount后获得金额总和是1900.但是当我运行以下查询时我得到了1800.见下文。

select 
  `bet_Number`, 
  SUM(bet_tbl.`Amount`) - SUM(recover_tbl.`Amount`) AS 'AMOUNT'
from bet_tbl, recover_tbl
WHERE bet_tbl.status= recover_tbl.status
  AND bet_tbl.`bet_Date`=recover_tbl.`recover_Date` 
  AND bet_tbl.status = '0'
  AND bet_tbl.`bet_Date`='2013-07-02'
GROUP BY bet_tbl.`bet_Number`

以下是运行查询后的结果。

[结果]:

enter image description here

我无法找到错误的地方。我陷入困境,需要帮助。谢谢你提出任何建议和答案。

3 个答案:

答案 0 :(得分:1)

你这样做会产生1800.这是因为加入后会进行聚合。 你知道有两个记录有11个bet_number和1000个金额。因此,与另一个表连接将产生两个记录......

bet_number           bet_tbl.Amount            recover_tbl.Amount
11                   1000                      100
11                   1000                      100

现在汇总它就会结束

bet_number           SUM(bet_tbl.Amount)       SUM(recover_tbl.Amount)
11                   2000                      200

因此结果是2000-200 = 1800

在使用recover_tbl减去金额之前,您需要在表bet_tbl中进行汇总。像

这样的东西
SELECT 
T1.*
FROM
(
    select 
    bet_number,
    SUM(Amount) Amount
    FROM
    bet_tbl
    WHERE 
    bet_tbl.status = '0'
    bet_tbl.bet_Date ='2013-07-02'
    Group by bet_number
) T1
JOIN recover_tbl T2
ON T1.bet_number = T2.recover_number

答案 1 :(得分:0)

如果你只想要bet_tbl.bet_Number = '11',你就错过了

select 
  `bet_Number`, 
  SUM(bet_tbl.`Amount`) - SUM(recover_tbl.`Amount`) AS 'AMOUNT'
from bet_tbl, recover_tbl
WHERE bet_tbl.status= recover_tbl.status
  AND bet_tbl.`bet_Date`=recover_tbl.`recover_Date` 
  AND bet_tbl.status = '0'
  AND bet_tbl.`bet_Date`='2013-07-02'
  and bet_tbl.bet_Number = '11'
GROUP BY bet_tbl.`bet_Number`

答案 2 :(得分:0)

尝试在Distinctbet_Number

前面添加Max(bet_number)子句
相关问题