You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对相同ID的记录汇总余额与支付总额并实现去重?

解决方案:按ID计算余额加支付总和并去重隐藏列

原始数据

IDBALANCEPAYMENTDATE
115731/3/2021
115743/3/2021
115774/3/2021
115789/3/2021
2304921/2/2021
3208318/5/2021

步骤1:生成包含原记录与TOTAL的中间结果

使用窗口函数SUM() OVER (PARTITION BY ID)按ID分组计算所有PAYMENT的总和,再与BALANCE相加得到TOTAL。这条SQL会保留所有原始记录,并为每条记录添加上对应ID的TOTAL值:

SELECT 
    ID,
    BALANCE,
    PAYMENT,
    DATE,
    BALANCE + SUM(PAYMENT) OVER (PARTITION BY ID) AS TOTAL
FROM your_table_name;

执行后中间结果:

IDBALANCEPAYMENTDATETOTAL
115731/3/2021179
115743/3/2021179
115774/3/2021179
115789/3/2021179
2304921/2/2021313
3208318/5/2021211

步骤2:嵌套查询去重并隐藏PAYMENT列

将上述查询作为子查询,通过DISTINCT去重(同一ID的BALANCE和TOTAL完全相同),同时只保留需要的列:

SELECT DISTINCT
    ID,
    BALANCE,
    TOTAL
FROM (
    SELECT 
        ID,
        BALANCE,
        PAYMENT,
        DATE,
        BALANCE + SUM(PAYMENT) OVER (PARTITION BY ID) AS TOTAL
    FROM your_table_name
) AS temp;

最终结果:

IDBALANCETOTAL
1157179
2304313
3208211

替代方案:直接分组计算

如果你的数据库支持,也可以用更简洁的GROUP BY方式实现,避免嵌套窗口函数:

SELECT
    ID,
    MAX(BALANCE) AS BALANCE, -- 同一ID的BALANCE值一致,用MAX/MIN均可
    MAX(BALANCE) + SUM(PAYMENT) AS TOTAL
FROM your_table_name
GROUP BY ID;

内容的提问来源于stack exchange,提问作者Harold Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:09:29