PostgreSQL查询优化:按tau分组将字段值合并为数组
PostgreSQL分组聚合查询解决方案
你可以使用PostgreSQL的聚合函数array_agg和string_agg实现需求,具体查询语句如下:
SELECT id, tau, array_agg(wspd) AS wspd, string_agg(sector::text, ',') AS sector, string_agg(radius::text, ',') AS radius FROM data_base WHERE id = 49272 GROUP BY id, tau ORDER BY tau;
关键逻辑说明:
- 分组规则:通过
GROUP BY id, tau将同一id和tau值的行归为一组,确保聚合操作仅针对同一tau的所有记录。 - wspd聚合:
array_agg(wspd)直接将分组内的wspd数值聚合成PostgreSQL原生数组,完全匹配示例中{34,50}的格式。 - sector/radius聚合:由于这两个字段本身是数组类型,先通过
::text将其转为保留原数组格式的文本,再用string_agg(..., ',')将所有文本元素用逗号拼接,得到示例中{NE,SE,SW,NW},{NE,SE,SW,NW}的格式。 - 排序控制:
ORDER BY tau确保结果按tau值升序排列,和示例输出的顺序一致。
如果需要保证wspd数组内的元素顺序(比如按数值大小或原数据顺序),可以在array_agg中指定排序规则:
array_agg(wspd ORDER BY wspd) AS wspd
内容的提问来源于stack exchange,提问作者jms1980
相关产品推荐
相关产品推荐

