0

我得到了错误的 sql 结果,其金额为双减值。

我想从另一个表中减去总和从一个表中减去总和。

这是bet_tbl(第一表)数据。仅选中bet_Number“11”。bet_tbl 的总和为 2000。见下文。

bet_tbl

在此处输入图像描述

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

见下文。

在此处输入图像描述

最终结果我想在减去后得到金额的总和bet_tbl.Amountrecover_tbl.Amount1900。但是当我运行以下查询时我得到了 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`

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

[结果]:

在此处输入图像描述

我找不到哪里出错了。我陷入了困境,需要帮助。感谢您的任何建议和答案。

4

3 回答 3

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
于 2013-07-04T11:02:55.543 回答
0

如果您只想要 bet_tbl.bet_Number = '11',那么您在 where 中缺少它

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`
于 2013-07-04T09:11:35.117 回答
0

尝试在orDistinct前面添加子句bet_NumberMax(bet_number)

于 2013-07-04T09:16:57.020 回答