我有一个表,其中有一些列,我想每行总结一下。它看起来像
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 + ...)
?
答案 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
即可避免大规模合并。