使用另一个数组查找数组中的出现次数?

时间:2019-10-24 16:08:06

标签: sql postgresql

我们说有一个基础:

CREATE TABLE test (
    ids integer[]
);

有数据

INSERT INTO test VALUES ('{1, 2, 3, 4}');
INSERT INTO test VALUES ('{5}');

我想在测试数据库中找到任意数组的出现次数,例如:“ {5,1}”,这可以通过什么方式完成?

在我的尝试中,除了找到的元素外,我只能找到数组中元素的总数:

select sum(array_length(array(
    (select unnest(ids) except select unnest(array[5,1]))
), 1)) from test;

但是,我需要从传输的数组中发现的确切数目。我怎么能找到。那?

DbFiddle

1 个答案:

答案 0 :(得分:3)

您可能想要这样:

select count(*) from test, unnest(ids) as id where id =ANY('{5,1}');

或者最多计数一次来自测试的每一行,然后这样做:

select count(*) from test where ids && '{5,1}'

在您的示例中,它们都给出“ 2”,但通常它们做的事情不同。