首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >消除postgres中的重复数组值

消除postgres中的重复数组值
EN

Stack Overflow用户
提问于 2010-10-22 14:54:35
回答 4查看 88.3K关注 0票数 98

我有一个bigint类型的数组,如何删除该数组中的重复值?

例如:array[1234, 5343, 6353, 1234, 1234]

我应该叫array[1234, 5343, 6353, ...]

我测试了postgres手册中的示例SELECT uniq(sort('{1,2,3,2,1}'::int[])),但它不工作。

EN

回答 4

Stack Overflow用户

发布于 2013-05-17 06:57:45

我组装了一组存储过程(函数)来应对PostgreSQL缺乏数组处理的问题,这就是所谓的anyarray。这些函数被设计用于任何数组数据类型,而不是像intarray那样只处理整数:https://www.github.com/JDBurnZ/anyarray

在您的情况下,您真正需要的是anyarray_uniq.sql。将该文件的内容复制并粘贴到PostgreSQL查询中,并执行该查询以添加函数。如果您还需要数组排序,还需要添加anyarray_sort.sql

然后,您可以执行一个简单的查询,如下所示:

SELECT ANYARRAY_UNIQ(ARRAY[1234,5343,6353,1234,1234])

返回类似于:ARRAY[1234, 6353, 5343]的内容

或者,如果您需要排序:

SELECT ANYARRAY_SORT(ANYARRAY_UNIQ(ARRAY[1234,5343,6353,1234,1234]))

准确返回:ARRAY[1234, 5343, 6353]

票数 13
EN

Stack Overflow用户

发布于 2014-05-14 17:01:23

下面是“内联”的方法:

代码语言:javascript
运行
复制
SELECT 1 AS anycolumn, (
  SELECT array_agg(c1)
  FROM (
    SELECT DISTINCT c1
    FROM (
      SELECT unnest(ARRAY[1234,5343,6353,1234,1234]) AS c1
    ) AS t1
  ) AS t2
) AS the_array;

首先,我们从数组创建一个集合,然后只选择不同的条目,然后将其聚合回数组。

票数 9
EN

Stack Overflow用户

发布于 2020-04-08 20:51:00

在一个查询中,我这样做了:

代码语言:javascript
运行
复制
SELECT (select array_agg(distinct val) from ( select unnest(:array_column) as val ) as u ) FROM :your_table;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3994556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档