首页 > 解决方案 > SQL - 修改记录以获取一列中季度的总余额,即使对于 SQL 中的特定季度也是如此

问题描述

我正在处理一个查询,我必须拥有所有季度的总余额。例如

ID  NAME  Quarter BALANCE
1   RB    202010  500
1   RB    202020  200
2   AD    202020  100
3   KT    202020  800
3   KT    201910  699

我使用 sum(balance) over(partition by ID) TOTAL_BALANCE -

 ID  NAME  Quarter BALANCE TOTAL_BALANCE
 1   RB    202010  500     700
 1   RB    202020  200     700
 2   AD    202020  100     100
 3   KT    202020  800     1499
 3   KT    201910  699     1499

现在我需要一个结果,如果我在 Quarter 上使用过滤器,比如 Quarter = '202020' 它应该给出 -

ID  NAME  Quarter BALANCE TOTAL_BALANCE
1   RB    202020  200     700
2   AD    202020  100     100
3   KT    202020  800     1499

但由于分区功能需要使用 Group by 'Balance' 我得到 -

  ID  NAME  Quarter BALANCE TOTAL_BALANCE
  1   RB    202020  200     200
  2   AD    202020  100     100
  3   KT    202020  800     800

标签: mysqlsqlsumwhere-clausewindow-functions

解决方案


您可以在子查询中使用窗口函数,然后在外部查询中进行过滤:

select *
from (select t.*, sum(balance) over(partition by id) total_balance from mytable t) t
where quater = '2020'

推荐阅读