gpt4 book ai didi

sql - 从数组生成大小为 2 的 postgres 中的唯一组合

转载 作者:行者123 更新时间:2023-11-29 12:11:56 28 4
gpt4 key购买 nike

我有一个跟进 this question我在其中生成了此类表的数组:

 val | fkey | num
------------------
1 | 1 | 10
1 | 2 | 9
1 | 3 | 8
2 | 3 | 1

其中生成的返回行会像这样(fkeys 基本上聚合到一个列表中):

1 | [1,2,3]

我想做的是根据“num”列中的值修改查询。也就是说,我想要这样的东西:

1 | [1,2] | [10, 9]
1 | [1,3] | [10, 8]
1 | [2,3] | [9, 8]

返回查询中第三列的排序不影响我。现在我有这样的东西:

SELECT val, array_agg(fkey), array_agg(num)
FROM mytable
GROUP BY val
Having Count(fkey) > 1

但这会返回更像的东西:

1 | [1,2,3] | [10, 9, 8]

这没问题,除了我无法轻易分辨出第三个数组中的哪个数字来自哪个 fkey(如果这有意义的话)。像这样的东西可以用来跟踪它:

1 | [1,2,3] | [10 - 1, 9 - 2, 8 - 3]

我不确定执行此操作的最佳方法是什么,但我愿意接受建议。

编辑:我使用的是 Postgres 9.3.6。表定义是:

awesome-db=# \d mytable
Table "public.mytable"
Column | Type | Modifiers
----------+---------+-----------
val | bytea | not null
fkey | uuid | not null
num | integer | not null
Indexes:
"comp_key" UNIQUE CONSTRAINT, btree (fkey, num, val)
"fingerprint_index" btree (val)

最佳答案

您需要一个使用 row_number自连接:

select t1.val,t1.fkey||','||t2.fkey,t1.num||','|| t2.num
from (select row_number() over(order by val) rn,
val,
fkey,
num
from mytable) t1
join (select row_number() over(order by val) rn,
val,
fkey,
num
from mytable) t2
on t1.val=t2.val and t1.rn<t2.rn

SQLFIDDLE DEMO

关于sql - 从数组生成大小为 2 的 postgres 中的唯一组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29383249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com