如何按同列不同值筛选行 实现同ID下各类型金额聚合单行展示
问题说明
现有交易系统使用同一列TYPE存储交易类型,常见取值包括Bill、Sales Order、Invoice、Purchase Order等,同一ID可关联多条交易记录(比如ID 1可同时关联收入、成本类的多条记录),原始数据格式示例:
ID TYPE AMOUNT 1 Bill 5 1 Bill 2 1 PurcOder 2 2 SAlesOrder 1
需要提取全量数据,满足两个要求:
- 每个ID下的每类
TYPE仅展示1行 - 同一ID+TYPE维度下的
AMOUNT做求和汇总
实现方案
核心逻辑是按ID、TYPE两个维度做分组,对AMOUNT字段做求和聚合,根据处理数据的工具不同,可选择对应实现方式:
SQL(数据库直接取数)
如果直接从业务库查询数据,使用GROUP BY语法即可,基础查询语句:
SELECT ID, TYPE, SUM(AMOUNT) AS total_amount FROM 交易表名 GROUP BY ID, TYPE ORDER BY ID, TYPE;
用示例数据跑上述语句,输出结果为:
ID TYPE total_amount 1 Bill 7 1 PurcOder 2 2 SAlesOrder 1
注意:原始数据里存在TYPE拼写不统一、大小写混乱的问题(比如示例里的
PurcOder是Purchase Order的错写、SAlesOrder大小写错误),可以在查询时用CASE WHEN做值映射,统一标准类型名,避免同类型因为拼写问题被拆分成多行:
SELECT ID, CASE WHEN TYPE IN ('PurcOder', 'PO', 'PurOrder') THEN 'Purchase Order' WHEN TYPE IN ('SAlesOrder', 'SO', 'SalesOrd') THEN 'Sales Order' ELSE TYPE END AS standard_type, SUM(AMOUNT) AS total_amount FROM 交易表名 GROUP BY ID, standard_type ORDER BY ID, standard_type;
Python Pandas(离线数据处理)
如果数据已经导出为CSV/Excel文件,用Pandas处理的代码示例:
import pandas as pd # 替换为实际的数据读取逻辑,比如pd.read_csv("交易数据.csv") df = pd.read_excel("交易数据.xlsx") # 分组聚合计算金额总和 result = df.groupby(by=["ID", "TYPE"], as_index=False)["AMOUNT"].sum() result = result.rename(columns={"AMOUNT": "total_amount"}) # 如需统一TYPE命名,加以下映射替换逻辑 type_replace_map = { "PurcOder": "Purchase Order", "SAlesOrder": "Sales Order" } result["TYPE"] = result["TYPE"].replace(type_replace_map)
Excel(轻量表格处理)
如果数据量不大,直接用Excel数据透视表即可快速得到结果:
- 选中所有原始数据区域,点击顶部菜单栏「插入」→「数据透视表」
- 在透视表字段配置面板,将
ID、TYPE依次拖入「行」区域 - 将
AMOUNT拖入「值」区域,点击值字段设置,汇总方式选择「求和」 - 即可直接输出符合要求的汇总结果
内容的提问来源于stack exchange,提问作者S. R.
相关产品推荐
相关产品推荐

