【发布时间】:2020-12-03 19:15:57
【问题描述】:
有没有办法检查整数数组中是否存在多次出现的任何元素?如果存在冗余,则布尔值 False 或违规元素列表都可以。
【问题讨论】:
标签: sql arrays postgresql unnest
有没有办法检查整数数组中是否存在多次出现的任何元素?如果存在冗余,则布尔值 False 或违规元素列表都可以。
【问题讨论】:
标签: sql arrays postgresql unnest
unnest() 数组,然后使用 GROUP BY 和 HAVING 和 count() 过滤出现多次的值。
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 extension,如果您有重复,这将返回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)
【讨论】: