我有一个包含 2 条记录的表(说明目的)
| id | access (int array) |
| ---------------------------- |
| 1 | {0,1,0} |
| 2 | {1,0,0} |
我想选择这两个值并将它们合并在一起
在这种情况下获得最高值(value)的结果:
{1,1,0}
访问数组可以增长到超过 200 个值,因此我想避免在编程代码 (golang) 中这样做。
基本上和这个问题是一样的:Merge two (or more) arrays and keep values that are highest?但在我的例子中,分离的列被组合成一个带有数组的字段。
更新
row(access)
数组始终具有相同数量的值
最佳答案
试试这个查询(SqlFiddle):
select array_agg(elem)
from (
select distinct on (row_number) row_number, elem
from (
select id, elem, row_number() over (partition by id)
from (
select id, unnest(access) elem
from merge_test
where id in (1,2)
) sub
) sub
order by 1, 2 desc
) sub;
二进制数组
如果数组仅包含“0”和“1”并且具有相同数量的值:
create table merge_binary_test (id int, access int[]);
insert into merge_binary_test values
(1, '{0,1,0,1}'),
(2, '{1,0,0,1}');
select string_to_array(bit_or(elem)::text, null)::int[]
from (
select id, array_to_string(access, '')::varbit elem
from merge_binary_test
where id in (1,2)
) sub
string_to_array
-----------------
{1,1,0,1}
(1 row)
关于sql - PostgreSQL:加入 2 个具有最大值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819237/