SQL SUM GROUP BY两个表

Sjr*_*ile 5 sql group-by sum

我在编写SQL查询时遇到困难,该查询会将account_no正确分组并减去金额.

首先我写了这个查询,它更新一切正常,除了ACCOUNT_NO A-102应该最终为4500而不是两个不同的正确余额.

select transactions.account_no, account.balance, transactions.amount,
(account.balance + transactions.amount) AS "CORRECT BALANCE"
from transactions, account
where account.account_no = transactions.account_no;

ACCOUNT_NO| BALANCE   | AMOUNT    | CORRECTBALANCE 

A-102     |  4000     |  2000     |  6000                   
A-102     |  4000     |  -1500    |  2500                   
A-222     |  8000     |  -1000    |  7000                   
A-305     |  2000     |  1300     |  3300    
Run Code Online (Sandbox Code Playgroud)

我试图通过account_no进行求和并进行分组,但我无法弄清楚如何使用这两个表进行此操作.这只是我尝试但无法开始工作的东西.

select transactions.account_no, SUM(transactions.amount)
from transactions
group by transactions.account_no;


ACCOUNT_NO| SUM(TRANSACTIONS.AMOUNT) 
A-305     |    1300                     
A-102     |    500                      
A-222     |    -1000   
Run Code Online (Sandbox Code Playgroud)

预期结果应该是:

ACCOUNT_NO| BALANCE   | AMOUNT    | CORRECTBALANCE 

A-102     |  4000     |  500      |  4500                 
A-222     |  8000     |  -1000    |  7000                   
A-305     |  2000     |  1300     |  3300    
Run Code Online (Sandbox Code Playgroud)

这是因为账户A-102有两个不同的金额,但来自相同的余额.

Jos*_*ien 7

对于您的查询,要将两行分组在一行上,您可以尝试对帐号和余额进行分组:

SELECT  T.account_no
        ,A.balance
        ,SUM(T.amount) AS TotalAmount
        ,(A.balance + SUM(T.amount)) AS "CORRECT BALANCE"
FROM    transactions AS T
INNER JOIN account AS A ON T.account_no = A.account_no
GROUP BY T.account_no, A.balance;
Run Code Online (Sandbox Code Playgroud)

(顺便说一下,我使用ANSI连接而不是'旧'连接表的方式,因为你用这种方式做得更清楚.)

编辑

为了使事情更清楚一点,我做了一个SQL小提琴.这或多或少正确地代表了您的情况吗?

EDIT2

Kaf评论说,上述查询不会显示没有交易的任何账户.这可能是你想要的,但如果不是你可以像这样切换连接表:

SELECT  A.account_no
        ,A.balance
        ,SUM(T.amount) AS TotalAmount
        ,(A.balance + SUM(T.amount)) AS "CORRECT BALANCE"
FROM    account AS A
LEFT OUTER JOIN transactions AS T ON T.account_no = A.account_no
GROUP BY A.account_no, A.balance;
Run Code Online (Sandbox Code Playgroud)