我得到了错误的sql结果,它有一个双减去金额的值。
我想从另一张表中金额总和的表中减去金额总和。
这是bet_tbl
(第一张表)数据。仅检查bet_Number
“11”。 bet_tbl的金额总和为2000.见下文。
bet_tbl
:
这是recover_tbl
(第二表)数据。 recover_tbl
的金额总和为100。
见下文。
最终结果我希望在用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`
以下是运行查询后的结果。
[结果]:
我无法找到错误的地方。我陷入困境,需要帮助。谢谢你提出任何建议和答案。
答案 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)
尝试在Distinct
或bet_Number
Max(bet_number)
子句