SQL实现Table表分组求和后合并相同Level1行的方法
需求实现方案
以下按常用工具场景分别给出可直接落地的实现方法:
转换结果参考
第一次转换结果(分组求和后按Level1排序)
| Level1 | Level2 | Level3_sum |
|---|---|---|
| FR | DF | 1000 |
| FR | PA | 30888 |
| UK | LN | 1100 |
| US | CA | 37000 |
| US | LA | 10000 |
第二次转换结果(同Level1合并后)
| Level1 | Level2 | Level3_sum |
|---|---|---|
| FR | DF | 1000 |
| PA | 30888 | |
| UK | LN | 1100 |
| US | CA | 37000 |
| LA | 10000 |
方案1:纯SQL实现
第一次转换修正SQL
注:原始SQL不符合标准SQL规范,补充非聚合字段到分组条件避免报错
SELECT Level1, Level2, SUM(Level3) AS Level3_sum FROM `Table` GROUP BY Level1, Level2 ORDER BY Level1 ASC
第二次转换(合并同Level1显示)SQL
SELECT CASE WHEN rn = 1 THEN Level1 ELSE '' END AS Level1, Level2, Level3_sum FROM ( SELECT Level1, Level2, SUM(Level3) AS Level3_sum, ROW_NUMBER() OVER(PARTITION BY Level1 ORDER BY Level2) AS rn FROM `Table` GROUP BY Level1, Level2 ) t ORDER BY Level1 ASC, rn ASC
方案2:Excel实现
- 第一步分组求和:选中原始数据区域,点击「数据」选项卡→插入数据透视表,行区域依次拖入
Level1、Level2,值区域拖入Level3选择求和,排序设置按Level1升序即可得到第一次转换结果 - 第二步合并同Level1行:选中第一次结果的
Level1列所有数据,点击「开始」选项卡→「对齐方式」组→「合并后居中」下拉按钮→选择「相同内容单元格合并」即可完成效果
方案3:Python Pandas实现
import pandas as pd # 构造原始数据(实际使用时替换为自己的数据源读取逻辑即可) data = { 'id': [1,2,3,4,5,6,7,8], 'Level1': ['US','FR','US','US','UK','UK','FR','FR'], 'Level2': ['CA','PA','CA','LA','LN','LN','PA','DF'], 'Level3': [13000,30000,24000,10000,500,600,888,1000] } df = pd.DataFrame(data) # 第一次转换:分组求和+排序 df_first = df.groupby(['Level1','Level2'], as_index=False)['Level3'].sum().sort_values('Level1') # 第二次转换:合并相同Level1显示 df_second = df_first.copy() df_second['Level1'] = df_second['Level1'].mask(df_second['Level1'].duplicated(), '') print(df_second)
内容的提问来源于stack exchange,提问作者tamer salem
相关产品推荐
相关产品推荐

