检查数组元素是否多次出现



有没有办法检查整数数组中是否有多次出现的元素?布尔值False(如果存在冗余(或违规元素列表都可以。

unnest()数组,然后将GROUP BYHAVINGcount()一起使用,以筛选多次出现的值。

SELECT un.n
FROM unnest('{1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 10}'::integer[]) un (n)
GROUP BY un.n
HAVING count(*) > 1;

要获得布尔值,可以在子查询中使用EXISTS和以上内容。

SELECT EXISTS (SELECT un.n
FROM unnest('{1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 10}'::integer[]) un (n)
GROUP BY un.n
HAVING count(*) > 1);

如果安装了intarray扩展,如果有重复项,则会返回false

icount(your_array) = icount(uniq(your_array))

如果没有,那么在重复的情况下,我将使用unnest()返回false

select count(unnest) = count(distinct unnest)
from your_table
cross join lateral unnest(your_array)

最新更新