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中做到这一点。 任何帮助将不胜感激!!
答案 0 :(得分:2)
您没有内置功能但可以使用UDX 请参阅vertica github您需要GroupConcat函数
答案 1 :(得分:2)
看看我LISTAGG的实现,它实际上模仿了Oracle函数LISTAGG
。 1}}和GROUP_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