для UPDATE между несколькими строками?
Например, есть: x = 15
id | value
1 | 10
2 | 10
Нужно сделать что-то вроде
UDPATE tbl SET value = value - (x ...);
Чтобы по итогу получилось
id | value
1 | 0
2 | 5
На python это было бы
for row in rows:
if x > row.value:
x -= row.value
row.value = 0
else:
row.value -= x
x = 0
оконные функции + CTE + join в update. Но оно того стоит только если обновляется дйствительно очень много данных. Иначе проще написать на алгоритмическом языке — хоть pl/pgsql, хоть в приложении.
Пожалуй так и сделаю)
CREATE OR REPLACE function foxnums (vars text,x int) RETURNS SETOF integer AS $BODY$ DECLARE rec int; BEGIN FOR rec IN EXECUTE $1 loop if $2>rec then rec=$2-rec; return next rec; elsif $2<rec then rec=rec-$2; return next rec; else rec=rec; return next rec; end if; END LOOP; END; $BODY$ LANGUAGE 'plpgsql' select foxnums('select * from nums', 15)
Ох, боюсь мне понадобится про многое прочитать чтобы хотя бы половину от этого понять), возьму на заметку. Спасибо
🦊 Не за что ((А так вот (https://postgrespro.ru/docs/postgresql/9.5/plpgsql-control-structures) ))
Обсуждают сегодня