sql - PostgreSQL:加入 2 个具有最大值的数组

标签 sql postgresql

我有一个包含 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?但在我的例子中,分离的列被组合成一个带有数组的字段。

更新

  1. 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/

相关文章:

sql - 所有者 ID 类型数据库字段

php - 错误 : duplicate key violates unique constraint "search6_idx1"

sql - 从付款日期栏开始,星期一发生了多少笔付款?下面的代码给我零计数

sql - 来自 oracle 数据库的 sql 查询

sql - 如何在 Ruby on Rails 5 中检索随机 GET 请求?

sql - 为自引用表设置一对多关系

mysql - 只计算某些字段唯一的地方? (多个 GROUP BY)

postgresql - sequelize.findOrCreate 即使表为空也没有保存

postgresql - 有没有办法依赖 Postgres 通知/监听机制?

postgresql - 如何安装旧版本的 postgresql 和 postgis?