有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从一个表中减去金额之和,再从另一个表中减去金额之和

我得到了错误的sql结果,该结果的值为双负值

我想用另一张表的金额总和减去一张表的金额总和

这是bet_tbl(第一个表)数据。只勾选bet_Number“11”。赌注总额为2000英镑。见下文

bet_tbl

enter image description here

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

见下文

enter image description here

最后的结果是,用recover_tbl.Amount减去bet_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) 个答案

  1. # 1 楼答案

    如果你只想打赌。打赌号码='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`
    
  2. # 2 楼答案

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

  3. # 3 楼答案

    你这样做会得到1800分。这是因为聚合是在加入后执行的。 你知道有两个记录,11个下注号码,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