arrays - 在 Postgres UPDATE 查询中循环
问题描述
(Postgres 10.10)我在my_table中有以下字段:
loval INTEGER
hival INTEGER
valcount INTEGER
values INTEGER[]
我需要将值设置为一个数组,该数组包含valcount随机整数,每个整数介于loval和hival之间。因此对于:
loval: 3
hival: 22
valcount: 6
我希望将值设置为:
{3, 6, 6, 13, 17, 22}
我知道如何使用低效的“循环游标”解决方案来做到这一点,但我想知道 Postgres 是否有办法进行内联循环计算。
注意:我查看了 generate_series,但我认为它不会产生我需要的东西。
解决方案
generate_series()
确实是解决方案:
update my_table
set "values" = array(select (random() * (hival - loval) + loval)::int
from generate_series(1, valcount));
请注意,这values
是一个保留关键字,将其用作列名并不是一个好主意。
推荐阅读
- tree - 修改后的背包问题陷入无限循环
- reactjs - 使用 ssl 和安全性在同一端口上的 React.JS 和 Node.JS
- c# - C# - System.Data.OleDb 用于 Excel - 如何管理连接?
- asynchronous - 赛普拉斯,页面内容和变量
- mysql - 如果不对 id(主键)进行硬编码,MySQL 插入语句将无法工作
- c++ - 在 Qt Debug 构建中运行项目后,二进制文件 (exe) 消失并且目标文件缩小。如何解决?
- java - 在从 sqlite DB 获取的列表视图中显示粗体字母
- android - Flutter日历添加事件'package:flutter_calendar_carousel/classes/event.dart':断言失败:第15行pos 15:'date!= null':不正确
- c# - Linq:根据另一个列表分组和求和
- python - Python:如何在类中可靠地清理 httpx 或请求会话对象?