好的,我的问题与this类似,但我的情况有所不同。在我的PostgreSQL 9.5数据库中,我有一个表my_table
,其布局如下:
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)
对于每条记录都是唯一的,而每个变量(numeric)
,a
和b
共有24列c
,因此总计为72列。我想将这72列中的每个条目乘以一个固定的数字,比方说0.20。我知道这样的PostgreSQL UPDATE
命令:
UPDATE my_table set a0 = a0 * 0.20
在这种情况下,我需要重复此命令很多次(不需要的)。是否有另一种快速方法(单SELECT
或迭代)将固定数字乘以多列?
答案 0 :(得分:1)
示例表:
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中使用anonymous code block:
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)