You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何对integer[]数组列转置后按位求和

PostgreSQL 数组按位置求和方案

从你给出的表字段类型integer[]判断使用的是PostgreSQL数据库,不需要编写自定义SQL函数,原生语法即可实现数据库侧聚合计算,千条数据量级计算耗时在1ms以内,远优于前端拉取全量数据再计算的效率。

输出为9个独立列

PostgreSQL数组默认从1开始索引,直接按下标取对应位置值求和即可,测试数据运行结果完全匹配你的预期:

SELECT
  SUM(counts[1]) AS value0,
  SUM(counts[2]) AS value1,
  SUM(counts[3]) AS value2,
  SUM(counts[4]) AS value3,
  SUM(counts[5]) AS value4,
  SUM(counts[6]) AS value5,
  SUM(counts[7]) AS value6,
  SUM(counts[8]) AS value7,
  SUM(counts[9]) AS value8
FROM 你的表名;

输出为单个数组

固定长度写法(性能最优)

直接将上述各位置求和结果用数组构造器包装即可,逻辑简单易维护:

SELECT
  ARRAY[
    SUM(counts[1]),
    SUM(counts[2]),
    SUM(counts[3]),
    SUM(counts[4]),
    SUM(counts[5]),
    SUM(counts[6]),
    SUM(counts[7]),
    SUM(counts[8]),
    SUM(counts[9])
  ] AS counts
FROM 你的表名;

通用动态写法(适配任意数组长度)

如果后续数组长度可能调整,可以用unnest加序数标记的写法,不需要硬编码下标,不管数组有多少个元素都能正确按位置求和:

SELECT ARRAY(
  SELECT SUM(val)
  FROM 你的表名,
       unnest(counts) WITH ORDINALITY AS t(val, idx)
  GROUP BY idx
  ORDER BY idx
) AS counts;

注意事项

  • 不要按0下标取数组元素,PostgreSQL默认数组索引起始值为1,0下标会返回空值
  • 通用写法的性能和固定下标写法差异极小,千条到十万条数据级别都可以放心使用

内容的提问来源于stack exchange,提问作者tkgstrator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:42:18