许多列的SUM的语法糖

时间:2016-12-20 19:49:18

标签: sql postgresql

我有一个表,其中有一些列,我想每行总结一下。它看起来像

ID  VALUE1  VALUE2 VALUE3     ...  VALUE34
============================
1   1       2       2
1   2       2       5
2   3       4       6
2   4       5       7

我知道要总结两列,我可以做到

SELECT  ID, SUM(VALUE1 + VALUE2)
FROM    tableName
GROUP   BY ID

是否有任何语法糖或某些东西可以帮助我总结所有 34 值而无需SUM(VALUE1 + VALUE2 + VALUE3 + ...)

1 个答案:

答案 0 :(得分:2)

如果你不能使用更好的数据模型,那么使用数组呢?这也允许您更改表中元素的数量而不必更改它:

create table tableName (
  id integer,
  valuez integer[]
)

等同于您的查询:

select id, valuez[1] + valuez[2] + ... + valuez[34]
from tableName

但是使用数组你可以不用和总结:

with sums as (
  select id, unnest (valuez) as val
  from tableName
)
select id, sum (val)
from sums
group by id

这也简化了空值处理 - 只需添加where val is not null即可避免大规模合并。