PostgreSQL窗口函数中如何让string_agg返回it_org_6的唯一值
解决方案
在PostgreSQL中,只需在针对it_org_6的string_agg函数内添加DISTINCT关键字,就能在保留原有窗口分区规则、不使用GROUP BY且最小改动原查询的前提下,实现仅聚合该列的唯一值。
修改后的查询关键部分如下:
select *, string_agg(it_service, ',') over ( partition by numeric_encoding, host_id, patch_version ) as binary_it_services, string_agg(distinct it_org_6, ',') over ( partition by numeric_encoding, host_id, patch_version ) as shared_gbgfs from joined_tables
说明
- 该方案仅改动了
shared_gbgfs对应的string_agg调用,添加DISTINCT后,窗口函数会自动在当前分区内对it_org_6的取值去重,再进行字符串聚合。 - 此方法要求PostgreSQL版本为10及以上,因为PostgreSQL 10才开始支持在窗口聚合函数中使用
DISTINCT。若使用更低版本,可通过子查询先在分区内标记唯一值再聚合,但会增加查询复杂度,优先推荐升级版本或使用上述简洁方案。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

