我有一个bigint
类型的数组,如何删除该数组中的重复值?
例如:array[1234, 5343, 6353, 1234, 1234]
我应该叫array[1234, 5343, 6353, ...]
我测试了postgres手册中的示例SELECT uniq(sort('{1,2,3,2,1}'::int[]))
,但它不工作。
发布于 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]
发布于 2014-05-14 17:01:23
下面是“内联”的方法:
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;
首先,我们从数组创建一个集合,然后只选择不同的条目,然后将其聚合回数组。
发布于 2020-04-08 20:51:00
在一个查询中,我这样做了:
SELECT (select array_agg(distinct val) from ( select unnest(:array_column) as val ) as u ) FROM :your_table;
https://stackoverflow.com/questions/3994556
复制相似问题