如何使用标准 SQL 将数据字段聚合到同一行?

问题描述 投票:0回答:1

我有一个数据框,如下所示:

身份证 四分之一 技能 类型
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 amazon-s3 amazon-athena
1个回答
1
投票

为了实现您正在寻找的聚合,您需要稍微调整 SQL 查询。当前方法的问题在于,您按“技能”和“类型”列进行分组,这会阻止跨这些维度进行聚合。相反,您只想按 ID 和季度进行分组,然后在这些组中聚合技能和类型。

SELECT 
    ID, 
    Quarter, 
    array_agg(Skill) AS Skills, 
    array_agg(Type) AS Types
FROM table1
GROUP BY ID, Quarter
© www.soinside.com 2019 - 2024. All rights reserved.