sql - 在 pl/pgsql-while 循环中更新单行表
问题描述
create table data(a1 float, a2 float);
insert into data values(1::float, 1::float);
do $$
declare
counter integer := 0;
begin
while counter < 50 loop
--SAVE THIS INTO DATA
SELECT a1-0.1*random(),
a2-0.1*random()
from data group by a1, a;
--SAVE THIS INTO DATA (END)
counter := counter + 1;
end loop;
end$$;
我想将 和 的值保存a1
到a2
第一个数据元组中。(基本上是一个运行记录)
如何将 a 的结果保存SELECT
到现有表中?
解决方案
这会更容易PRIMARY KEY
在桌子上:
create table data(id int primary key, a1 float, a2 float);
insert into data values(1, 1, 1);
select * from data;
id | a1 | a2
----+----+----
1 | 1 | 1
update data set a1 = a1 - 0.1*random(), a2 = a2 - 0.1*random() where id =1;
select * from data;
id | a1 | a2
----+--------------------+------------------
1 | 0.9039355377682678 | 0.98859843416964
然后将 合并UPDATE
到计数器循环中:
do $$
declare
counter integer := 0;
begin
while counter < 50 loop
--SAVE THIS INTO DATA
update data set a1 = a1 - 0.1*random(), a2 = a2 - 0.1*random() where id =1;
--SAVE THIS INTO DATA (END)
counter := counter + 1;
end loop;
end$$;
select * from data;
id | a1 | a2
----+---------------------+--------------------
1 | -1.3146675853588001 | -1.216530003992667
推荐阅读
- apache-kafka - 使用 Kafka-Python 共享文件夹/文件
- vb.net - Vb.Net 禁用启动和调试按钮
- python - 提取串行数据输入的特定部分并使用 Python 将其存储为 txt
- javascript - 为什么我的网站徽标无法适当调整大小?
- c - 为什么在c编程中条件为假时循环条件内的语句会执行?
- powershell - 在 PowerShell 脚本中传递参数时尝试转义括号
- python-3.x - 需要他创建一个程序来查找最长的一系列字母,其中前一个字母大于最后一个字母。它的输出求不求
- javascript - React useReducer 状态更新了一半
- flutter - 如何解决:使用 image_picker 插件从相机中拾取图像时 Flutter App 崩溃
- vb.net - 如何在 VB.Net 中使用 ClosedXML 将图表从 Excel 提取到电子邮件?