【发布时间】:2021-08-16 20:47:22
【问题描述】:
我有一个包含整数数组的单元格(使用语法创建的列:some_arrays integer[])
| id | some_arrays |
|----+-----------------|
| 0 | 10, 15, 20, 25 |
|----+-----------------|
| 1 | 1, 3, 5, 7 |
|----+-----------------|
| 2 | 33, 674, 2, 4 |
|----+-----------------|
对于任何给定的行,我想遍历每个数组,并为每个元素返回数组中除自身之外的所有元素的乘积。
例如:
some_arrays[0]
-> [10, 15, 20, 25]
-> [15 * 20 * 25, 10 * 20 * 25, 10 * 15 * 25, 10 * 15 * 20]
-> [7500, 5000, 3750, 3000]
在 Python 中,我们可以这样做:
def get_prod(array, n):
prod = 1
# calculate prod all elements in array
for i in range(n):
prod *= array[i]
# replace each element by the product divided by that element
for i in range(n):
array[i] = prod // array[i]
array = [10, 15, 20, 25]
n = len(array)
get_prod(array, n)
for i in range(n):
print(array[i], end=" ")
在 postgreSQL 中,选择一个单元格、遍历每个元素并获得其他元素的乘积的正确查询是什么?
可以将每个单元格的每个元素加倍并将其显示到新列:
SELECT id, (SELECT SUM(a) FROM unnest(some_arrays) AS a) AS total FROM this_table;
SELECT some_arrays,
ARRAY(SELECT x * 2
FROM unnest(some_arrays) AS x) AS doubles
FROM table;
这会产生:
| some_arrays | doubled |
|-----------------+-----------------
| 10, 15, 20, 25 | 20, 30, 40, 50 |
|-----------------+-----------------|
| 1, 3, 5, 7 | 2, 6, 10, 14 |
|-----------------+-----------------|
| 66, 674, 2, 4 | 33, 1348, 4, 8 |
|-----------------+-----------------|
(使用 Postgres 11.10)
感谢您提供有关编写综合 for 循环的任何提示!
【问题讨论】:
标签: arrays postgresql filter