从sql中的联接表求和

从sql中的联接表求和,sql,Sql,我正在尝试对tbl_paid的金额求和,其中交易编号与tbl_client.c_id=tbl_paid.c_id相同 基本上意味着我试图将3359和1的金额相加,其中c_id=172,transaction_num=2,因为它们有相同的记录。第1行和第2行,然后另一行保持原样 tbl_客户端 tbl_付费 看第一张图片,可以看到我用来连接表并获得输出的查询 我试图用我的查询来显示来自tbl_客户的所有记录,tbl_Payed加入了tbl_Payed,他们是今天支付的账户。如果当天支付两次,

我正在尝试对tbl_paid的金额求和,其中交易编号与tbl_client.c_id=tbl_paid.c_id相同

基本上意味着我试图将3359和1的金额相加,其中c_id=172,transaction_num=2,因为它们有相同的记录。第1行和第2行,然后另一行保持原样

tbl_客户端

tbl_付费

看第一张图片,可以看到我用来连接表并获得输出的查询

我试图用我的查询来显示来自tbl_客户的所有记录,tbl_Payed加入了tbl_Payed,他们是今天支付的账户。如果当天支付两次,则金额记录将添加到现有付款中。

sum()
分组依据

select t3.*, t4.*
from tbl_client t4    
inner join
    (select sum(t2.amount) as amt, t1.transaction_num, t1.c_id
        from tbl_client t1
        inner join tbl_paid t2 on t1.c_id = t2.c_id
        where t1.pay_date = current_date()
        group by t1.transaction_num, t1.cid
    ) t3 on t3.c_id = t4.c_id 
您可以使用SUM():


你想向客户展示他们今天的总付款额。因此,选择每个客户的总付款,然后将其加入客户表

select c.*, p.total
from tbl_client c
join 
(
  select c_id, sum(amount) as total
  from tbl_paid
  where pay_date = current_date()
  group by c_id
) p on p.c_id = c.c_id
order by c.c_id;
如果要显示没有当前付款的客户端,请将内部联接更改为外部联接

更新:在对ϻ的评论中ᴇᴛᴀʟ的回答是,你说你想看到不同的交易。如果是这样,那么您不需要每个客户机的合计,而是每个客户机和事务的合计,这是查询中的一个非常小的更改:

select c.*, p.transaction_num, p.total
from tbl_client c
join 
(
  select c_id, transaction_num, sum(amount) as total
  from tbl_paid
  where pay_date = current_date()
  group by c_id, transaction_num
) p on p.c_id = c.c_id
order by c.c_id;

谢谢你的回答,但没有得到我想要的。前两行应该合并,并将输出上的金额相加,变成1行。所以只有172和173的前两行?还是只有172?没有。它们应该合并,因为它们具有相同的c_id和transaction_num值。@ArvinjasonCabera,试试我的新查询请不要显示图像。而是将数据作为文本复制到您的请求中。然后,请显示样本数据和预期结果。然后,您没有使用MySQL、SQL Server和MariaDB。请仅使用您真正使用的一个DBMS标记您的请求。
select c.*, p.transaction_num, p.total
from tbl_client c
join 
(
  select c_id, transaction_num, sum(amount) as total
  from tbl_paid
  where pay_date = current_date()
  group by c_id, transaction_num
) p on p.c_id = c.c_id
order by c.c_id;