我有一个数据框,如下所示:
身份证 | 四分之一 | 技能 | 类型 |
---|---|---|---|
A | Q1 | Excel | 技术 |
A | Q1 | SQL | 技术 |
A | Q2 | Python | 技术 |
A | Q2 | R | 技术 |
B | Q1 | Java | 技术 |
B | Q1 | 演示 | 软技能 |
B | Q1 | 领导力 | 软技能 |
B | Q2 | Excel | 技术 |
我想聚合某些数据行(在本例中为“技能”和“类型”),同时将其他数据行分开(在本例中为“季度”),这样我的目标结果将如下所示:
身份证 | 四分之一 | 技能 | 类型 |
---|---|---|---|
A | Q1 | Excel、SQL | 技术,技术 |
A | Q2 | Python、R | 技术,技术 |
B | Q1 | Java | 技术 |
B | Q1 | 演讲、领导力 | 软技能,软技能 |
B | Q2 | Excel | 技术 |
我尝试使用“arrayagg()”函数来完成此操作,但似乎无法获得正确的结果,因为我的输出没有按预期将结果聚合在同一行。
使用的查询:
SELECT DISTINCT ID, Quarter, array_agg(DISTINCT Skill) Skill, array_agg(DISTINCT Type) Type
FROM table1
GROUP BY ID, Quarter, Skill, Type
为了实现您正在寻找的聚合,您需要稍微调整 SQL 查询。当前方法的问题在于,您按“技能”和“类型”列进行分组,这会阻止跨这些维度进行聚合。相反,您只想按 ID 和季度进行分组,然后在这些组中聚合技能和类型。
SELECT
ID,
Quarter,
array_agg(Skill) AS Skills,
array_agg(Type) AS Types
FROM table1
GROUP BY ID, Quarter