gpt4 book ai didi

arrays - Postgresql unnest 与序数以及看到的时间

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

假设我有一个可能重复的字符串数组

[a,a,b,c,a,b,c,d]

我想取消嵌套数组,以便我可以获得索引,以及该元素已在数组中取消嵌套的次数。我的所有数组都相对较短(25 个元素或更少)。

我的预期输出是:

a, 1, 1
a, 2, 2
b, 3, 1
c, 4, 1
a, 5, 3
b, 6, 2
c, 7, 2
d, 8, 1

我可以很容易地完成前两位 left join lateral unnest(arr) with ordinality as a(element, idx),但我也想要 times_seen 部分。

最佳答案

使用COUNT解析函数

SQL Fiddle

PostgreSQL 9.6 架构设置:

CREATE TABLE t
(arr TEXT[])
;

INSERT
INTO t (arr)
VALUES ('{a,a,b,c,a,b,c,d}'::TEXT[])
;

查询 1:

SELECT element
,idx
,COUNT(element) OVER (
PARTITION BY element ORDER BY idx
) AS times_seen
FROM t
,unnest(arr) WITH ordinality AS a(element, idx)
ORDER BY idx

Results :

| element | idx | times_seen |
|---------|-----|------------|
| a | 1 | 1 |
| a | 2 | 2 |
| b | 3 | 1 |
| c | 4 | 1 |
| a | 5 | 3 |
| b | 6 | 2 |
| c | 7 | 2 |
| d | 8 | 1 |

如果您可能有多行包含数组并且每个数组都有一个 ID 列,您可以使用

PARTITION BY ID,element 获取数组在该特定 id 处的计数值。

关于arrays - Postgresql unnest 与序数以及看到的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105366/

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