2017-08-27 3 views
1

さて、私の質問はthisと似ていますが、私のケースは異なります。私のPostgreSQL 9.5のデータベースでは、私は次のようなレイアウトを持つテーブルmy_tableていますので、最大合計する各変数abcのための24個の列(numeric)がある一方でPostgreSQL:複数の列のすべてのエントリに固定数を掛けるにはどうすればよいですか?

ID a0 a1 .. a23 b0 b1 .. b23 c0 c1 .. c23 
1 23 22 .. 11 12 0.12 .. 65 0.17 12 .. 19 
2 42 52 .. 12 1.2 14 .. 42 0.35 12 .. 12 
3 11 25 .. 13 2.5 0.14 .. 15 1.1 8 .. 14 

まず列ID (integer)は、各レコードの一意です72列。私はこれらの72列の各エントリを固定数に掛けたければ、0.20としましょう。私はこのようなPostgreSQLのUPDATEコマンドを認識しています:この場合

UPDATE my_table set a0 = a0 * 0.20 

、私はこのコマンドに(望ましくない)多数回繰り返す必要があります。複数の列に固定数を掛けるための別の高速アプローチ(単一のSELECTまたは反復)がありますか?

答えて

1

例テーブル:anonymous code block

drop table if exists my_table; 
create table my_table(id serial primary key, a1 dec, a2 dec, a3 dec); 
insert into my_table values 
(default, 1, 2, 3); 

使用execute

do $$ 
begin 
    execute concat('update my_table set ', string_agg(format('%1$I = %1$I * 0.2', attname), ',')) 
    from pg_attribute a 
    where attrelid = 'my_table'::regclass 
    and attnum > 0 
    and attname ~ '^[abc]+'; 
end 
$$; 

select * from my_table; 

id | a1 | a2 | a3 
----+-----+-----+----- 
    1 | 0.2 | 0.4 | 0.6 
(1 row) 
+0

ありがとうございます!あなたは命の恩人です:) –

関連する問題