LISTAGG在vertica

时间:2017-08-30 04:24:21

标签: vertica listagg

Vertica中LISTAGG的等价物 大家好! 我试图在一个字段中聚合特定组的所有字段值。 例如,我的输入表如下所示: -

FIELD1 GROUP1

A 1

A 2

B 1

B 2

C 1

C 3

3 null

我的输出应该如下: -

1 A,B,C

2 A,B

3 C

我现在可以通过使用以下函数

在Oracle上实现此目的
SELECT GROUP1, LISTAGG(FIELD1, ',') WITHIN GROUP (ORDER BY FIELD1) AS GROUPED_FIELD
FROM <INPUT_TABLE>
GROUP BY GROUP1;

我有没有办法在Vertica中做到这一点。 任何帮助将不胜感激!!

3 个答案:

答案 0 :(得分:2)

您没有内置功能但可以使用UDX 请参阅vertica github您需要GroupConcat函数

答案 1 :(得分:2)

看看我LISTAGG的实现,它实际上模仿了Oracle函数LISTAGGGROUP_CONCAT在git hub中有一些不利因素。

<强>编译:

CONCATENATE

安装:

g++ -D HAVE_LONG_INT_64  -I /opt/vertica/sdk/include \
    -Wall -shared -Wno-unused-value -fPIC            \
    -o ListAggLib.so ListAgg.cpp /opt/vertica/sdk/include/Vertica.cpp

示例:

CREATE LIBRARY ListAggLib AS '/home/dbadmin/ListAggLib.so';
CREATE ANALYTIC FUNCTION ListAgg AS LANGUAGE 'C++' NAME 'ListAggFactory' LIBRARY ListAggLib;

答案 2 :(得分:0)

Vertica在最新的9.1.1中刚刚添加了对LISTAGG的支持:https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/Aggregate/LISTAGG.htm

但是,它不支持ORDER BY子句,但是您可以使用以下解决方法:

select listagg(col1), col2
from (
  select col1, col2 from table1 order by col2, col1
) x
group by col2