分组合并展示
转自:https://www.cnblogs.com/wsmwsm/p/12910590.html
一、需求
根据部门汇总业绩,并展示员工业绩明细(效果图如下)
二、实现步骤:
2.1 将原始数据加载至power query中处理
2.2 对业绩进行汇总处理
比如第二行的海安与最后一行的海安为同一个人,要进行汇总操作。
2.3 合并名单与业绩
2.4 根据部门分组,求和业绩,合并名单
2.4.1 按正常的分组步骤对,名单列和业绩列进行求和分组
2.4.2 由于名单为文本,求和会出现Error,将 List.Sum函数 改为 Text.Combine函数
= Table.Group(合并名单总业绩, {"部门"}, {{"总业绩", each List.Sum([总业绩]), type number}, {"总名单", each List.Sum([名单]), type text}}) ##改为: = Table.Group(合并名单总业绩, {"部门"}, {{"总业绩", each List.Sum([总业绩]), type number}, {"总名单", each Text.Combine([名单]," "), type text}})
2.5 上传数据
三、用mysql语句解决
3.1 数据源准备
3.2 代码展示
select 部门,SUM(业绩) as '总业绩' ,GROUP_CONCAT(CONCAT(姓名,业绩)) as '总名单' from power_query GROUP BY 1
为了安全起见,建议先进行聚合操作。
select 部门,SUM(业绩) as '总业绩' ,GROUP_CONCAT(CONCAT(姓名,业绩)) as '总名单' from ( select 部门,姓名,SUM(业绩) as '业绩' from power_query GROUP BY 1,2 ) as A GROUP BY 1 ;
3.3 结果展示
四、用Sql Server语句解决
4.1 配置
4.2 代码展示
-- 使用stuff 与FOR XML PATH select A.部门,SUM(业绩) as 总业绩,stuff((select ',',concat(姓名,业绩) from (select 部门,姓名,SUM(业绩) as 业绩 from test.cnblogs.分组合并 GROUP BY 部门,姓名) AS B WHERE B.部门=a.部门 FOR XML PATH('') ),1,1,'') as 总名单 from (select 部门,姓名,SUM(业绩) as 业绩 from test.cnblogs.分组合并 GROUP BY 部门,姓名) AS A GROUP BY A.部门 -- 使用STRING_AGG,注意版本要大于2016版,我这是2019版 SELECT 部门,SUM(业绩) as 总业绩,STRING_AGG(concat(姓名,业绩),',') as 总名单 from (select 部门,姓名,SUM(业绩) as 业绩 from test.cnblogs.分组合并 GROUP BY 部门,姓名 ) AS A GROUP BY 部门
4.3 结果展示
五、用Power Pivot解决
5.1 配置
Excel版本:2019
5.2 代码展示
5.3 结果展示
六、用Python
6.1 代码展示
# -*- coding: utf-8 -*- """ @time : 2023/9/5 22:44 @File: groupby_02.py @Software: PyCharm @Author : qianslup @Version: python3.9 """ import pandas as pd df = pd.read_excel(io=r'E:\博客\分组合并展示\分组合并展示.xlsx', sheet_name='Sheet1',header=0,usecols=['部门','姓名', '业绩']) cols = ['部门','姓名'] df = df.groupby(by=cols,as_index=False).sum() df['总名单'] = df['姓名']+df['业绩'].astype(str) df = df.groupby(by=['部门'],as_index=False).agg({'业绩':lambda x:sum(x),'总名单': lambda x:','.join(x)}) print(df)
6.2 结果展示