【问题标题】:Check if array element appears more than once检查数组元素是否多次出现
【发布时间】:2020-12-03 19:15:57
【问题描述】:

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

【问题讨论】:

    标签: sql arrays postgresql unnest


    【解决方案1】:

    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);
    

    【讨论】:

      【解决方案2】:

      如果您安装了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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 2013-12-09
        • 2011-04-17
        • 2017-03-11
        • 1970-01-01
        • 2016-10-13
        • 1970-01-01
        相关资源
        最近更新 更多