java - 用另一个表中的金额总和减去一个表中的金额总和

标签 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

我想在用 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

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

最佳答案

您这样做的方式将产生 1800。这是因为聚合是在加入后执行的。 您知道有两条记录,bet_number 为 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

关于java - 用另一个表中的金额总和减去一个表中的金额总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466224/

相关文章:

JavaMailMessage.GetContent 偶尔返回 IMAPInputStream

java - USBFS IOCTL 调用 witn JNA 在 64 位架构中不起作用

SQL 服务器 : Why Clustered Index Scan and not Table Scan?

sql - 插入存储过程后返回,成功则返回1,否则返回0

sql - 测量查询性能: "Execution Plan Query Cost" vs "Time Taken"

java - java中如何将数字四舍五入到6位有效数字?

java - 维护java中项目的顺序

c# - asp.net 网络表单中的 mysql_fetch_array

mysql - 为什么从 View 检索数据与该 View 的底层选择检索数据时存在性能差异

java - 在基于内存的 Derby 数据库(netbeans)中自动创建表结构