greenplum解决数组取交集问题

最近要用到一个数组合并取交集的功能。
在网上查了一下postgrasql中intarray 模块能直接支持:
--查找数组元素的交集
mydb=> select array[1,2,3] & array[3,4,5];
 ?column? 
----------
 {3}
(1 row)

安装intarray 模块:psql -d xmo_workspace -f intarray.sql
但在greenplum中没找到有intarray这个模块。
写一个函数来代替:
CREATE or replace FUNCTION array_intersect(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
     SELECT ARRAY(
        SELECT UNNEST($1)
        INTERSECT
        SELECT UNNEST($2)
    );
$FUNCTION$;


select array_intersect(array[1,2,3],array[2,3,4])

#=>{2,3}

顺便介绍一下行变列函数UNNEST:
select UNNEST(array[1,2,3])

#=>
1
2
3

列变行函数array_agg:
select array_agg(id) from students

#=>{1,2,3}

你可能感兴趣的:(PostgreSQL)