分组合并展示

转自: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 结果展示

 

posted @ 2020-06-28 23:15  qsl_你猜  阅读(863)  评论(0编辑  收藏  举报