2016-12-20 6 views
1

私は行ごとに合計したいいくつかの列を持っているテーブルがあります。私は2つの列を合計する知っ多くの列のSUMの構文の砂糖

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 

を行うことができますようにそれはSUM(VALUE1 + VALUE2 + VALUE3 + ...)を行うことなく、私はすべての値を合計することができます任意のシンタックスシュガーか何かがあるのに見えます?

+0

合計34個の列が必要な理由は何ですか? – Taryn

+1

私はあなたのテーブル名を取得するクエリを実行したい: '* information_schema.columns TABLE_SCHEMA =「your_schema」 AND TABLE_NAME =「tableNameの」FROM を選択;'後、カラムを利用して、クエリを構築するためにExcelを使用し補間。かわいいですが、うまくいきます。 –

+0

@bluefeet各プレイヤーは34個の「マッチデー」でいくつかのポイントを獲得できますので、テーブルにはプレーヤーIDと「マッチデー」のポイントがあります –

答えて

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 

これもnull取り扱いを簡素化 - 単にwhere val is not nullを追加し、大量の凝集を回避することができます。

関連する問題