Presto SQL如何按列分组后基于行值条件生成映射类型新列
Presto 实现分组生成指定映射列的方案
你可以通过 Presto 内置的聚合函数map_agg()实现需求,该函数会将输入的两组值分别作为键、值聚合成MAP类型字段,具体实现可以根据是否需要保留无匹配行的分组选择两种写法:
写法1:仅返回存在符合条件行的分组
先过滤符合Col2 >=3条件的行再分组聚合,执行效率更高,无匹配的Second分组不会出现在结果中:
SELECT Col1, map_agg(Col2, Col3) AS col_mapping FROM 你的实际表名 WHERE Col2 >= 3 GROUP BY Col1
输出示例:
| Col1 | col_mapping |
|---|---|
| First | {3:"three",4:"four",5:"five"} |
写法2:保留所有Col1分组
如果需要保留所有分组,无匹配行时返回空MAP,可以搭配FILTER子句实现:
SELECT Col1, map_agg(Col2, Col3) FILTER (WHERE Col2 >= 3) AS col_mapping FROM 你的实际表名 GROUP BY Col1
输出示例:
| Col1 | col_mapping |
|---|---|
| First | {3:"three",4:"four",5:"five"} |
| Second | {} |
内容的提问来源于stack exchange,提问作者Vedanta Jha
相关产品推荐
相关产品推荐

