在Postgres中找到数组中所有位置的所有元素的出现(计数)吗?

可以安息

我们如何找到postgres中数组类型元素的出现计数到位置映射?

例如:

["A", "B", "C", "D"]
["A", "B", "C", "D"]
["A", "B", "D", "C"]
["A", "D", "C", "B"]

应该屈服

元素 位置 发生次数
一种 1个 4
一种 2 0
一种 3 0
一种 4 0
1个 0
2 3
3 0
4 1个
C 1个 0
C 2 0
C 3 3
C 4 1个
d 1个 0
d 2 1个
d 3 1个
d 4 2

我知道array_position可以获得该职位(基于1),但是我对如何实现自己的目标感到困惑?

SQL查询:

create table test (id integer, priorities varchar(100)[]);
insert into test (id, priorities) values (1, '{"A","B","C","D"}');
insert into test (id, priorities) values (2, '{"A","B","C","D"}');
insert into test (id, priorities) values (3, '{"A","D","C","B"}');
insert into test (id, priorities) values (4, '{"A","C","B","D"}');

编辑#1:我想我可以以某种方式组合unnest with ordinalitygroup by实现这一目标。

男装

演示:db <>小提琴

棘手的部分是获取零记录。

为此,创建一个提供所有可能组合的表可能会有所帮助:

SELECT
    *
FROM (
    SELECT
        generate_series(1, max(cardinality(myarray))) idx   -- 1
    FROM t
) gs
CROSS JOIN (                                                -- 3
    SELECT DISTINCT                                         -- 2
        unnest(myarray) val
    FROM t
) values
  1. 创建一个从1到最大数组长度的序列这样可以确保即使长度不同也可以组合
  2. 创建一个包含所有可能出现在任何数组中的所有元素的表。
  3. CROSS JOIN 他们。

现在您有了参考表。在下一步中,您可以使用unnest() WITH ORDINALITY自己的解决方案中提供的。该结果可以LEFT JOIN在参考表上找到。因此,您正在使用预期的非零记录和许多NULL记录创建一个表

SELECT
    values.val, gs.idx,
    COUNT(*) FILTER (WHERE s.index IS NOT NULL)                   -- 1
FROM (
    SELECT
        generate_series(1, max(cardinality(myarray))) idx
    FROM t
) gs
CROSS JOIN (
    SELECT DISTINCT
        unnest(myarray) val
    FROM t
) values
LEFT JOIN (
    SELECT
        *
    FROM t,
        unnest(myarray) WITH ORDINALITY as a(val, index)
) s ON s.index = gs.idx AND s.val = values.val
GROUP BY values.val, gs.idx
ORDER BY values.val, gs.idx

最后,您可以将整个jpoin分组。使用FILTERon子句COUNT()可确保仅对那些记录进行计数,而不对进行计数NULL,这意味着:仅对真正出现在数据中的那些组合进行计数。对于NULL记录,过滤器将返回0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift中找到2d数组中所有元素的总和?

来自分类Dev

计数矩阵中所有整数的出现

来自分类Dev

输出php数组中的所有元素并计数它们的出现

来自分类Dev

如何从str中找到所有元素

来自分类Dev

PHP:数组中所有元素的数量

来自分类Dev

数组中所有可能的元素对的总和

来自分类Dev

数组中所有元素的总和

来自分类Dev

数组中所有元素的总和

来自分类Dev

获取数组中所有元素的ID

来自分类Dev

如果元素计数小于“ n”,则删除数组中所有相似的元素

来自分类Dev

如果元素计数小于“ n”,则删除数组中所有相似的元素

来自分类Dev

使用Perl计数文件中或目录中所有文件中所有单词的出现次数

来自分类Dev

如何使用密码查询返回一个数组中所有元素的计数?

来自分类Dev

如何在其数组元素中找到具有特定值的所有实体?

来自分类Dev

如何获取numpy中所有元素的计数?

来自分类Dev

Python在另一个数组中找到所有数组元素的索引

来自分类Dev

你能做些什么来找到数组中所有匹配的元素……你是如何实现的?

来自分类Dev

在带有xpath的表元素中找到所有tr?

来自分类Dev

如何从对象数组中找到数组的所有 id - Javascript

来自分类Dev

如何找到数组中所有数字的总和?

来自分类Dev

如何找到数组中所有数字的总和?

来自分类Dev

就地替换python列表中所有出现的元素

来自分类Dev

如何在numpy二维数组中找到与某个列表匹配的所有元素?

来自分类Dev

在O(nlogn)中找到数组中的所有差异,其中n是元素的最大范围

来自分类Dev

在mongodb的字段中找到任何数组元素时查询所有文档

来自分类Dev

在Prolog中找到列表中值的所有位置

来自分类Dev

在边界框中找到所有地理位置

来自分类Dev

所有max元素及其数组位置

来自分类Dev

选择Postgres中所有数组中存在的值

Related 相关文章

  1. 1

    如何在Swift中找到2d数组中所有元素的总和?

  2. 2

    计数矩阵中所有整数的出现

  3. 3

    输出php数组中的所有元素并计数它们的出现

  4. 4

    如何从str中找到所有元素

  5. 5

    PHP:数组中所有元素的数量

  6. 6

    数组中所有可能的元素对的总和

  7. 7

    数组中所有元素的总和

  8. 8

    数组中所有元素的总和

  9. 9

    获取数组中所有元素的ID

  10. 10

    如果元素计数小于“ n”,则删除数组中所有相似的元素

  11. 11

    如果元素计数小于“ n”,则删除数组中所有相似的元素

  12. 12

    使用Perl计数文件中或目录中所有文件中所有单词的出现次数

  13. 13

    如何使用密码查询返回一个数组中所有元素的计数?

  14. 14

    如何在其数组元素中找到具有特定值的所有实体?

  15. 15

    如何获取numpy中所有元素的计数?

  16. 16

    Python在另一个数组中找到所有数组元素的索引

  17. 17

    你能做些什么来找到数组中所有匹配的元素……你是如何实现的?

  18. 18

    在带有xpath的表元素中找到所有tr?

  19. 19

    如何从对象数组中找到数组的所有 id - Javascript

  20. 20

    如何找到数组中所有数字的总和?

  21. 21

    如何找到数组中所有数字的总和?

  22. 22

    就地替换python列表中所有出现的元素

  23. 23

    如何在numpy二维数组中找到与某个列表匹配的所有元素?

  24. 24

    在O(nlogn)中找到数组中的所有差异,其中n是元素的最大范围

  25. 25

    在mongodb的字段中找到任何数组元素时查询所有文档

  26. 26

    在Prolog中找到列表中值的所有位置

  27. 27

    在边界框中找到所有地理位置

  28. 28

    所有max元素及其数组位置

  29. 29

    选择Postgres中所有数组中存在的值

热门标签

归档