聚合函数以在Vertica中连接字符串

yab*_*exu 5 sql aggregate vertica

在vertica中有一个表:像这样测试:

ID     |   name
1      |    AA
2      |    AB
2      |    AC
3      |    AD
3      |    AE
3      |    AF
Run Code Online (Sandbox Code Playgroud)

如何使用聚合函数或如何编写查询以获取像这样的数据(vertica语法)?

ID    |  ag
1     |  AA
2     |  AB, AC
3     |  AD, AE, AF 
Run Code Online (Sandbox Code Playgroud)

woo*_*oot 2

首先,您需要编译 udx agg_concatenate

-- Shell commands
cd /opt/vertica/sdk/examples/AggregateFunctions/
g++ -D HAVE_LONG_INT_64 -I /opt/vertica/sdk/include -Wall -shared -Wno-unused-value -fPIC -o Concatenate.so Concatenate.cpp /opt/vertica/sdk/include/Vertica.cpp

-- vsql commands
CREATE LIBRARY AggregateFunctionsConcatenate AS '/opt/vertica/sdk/examples/AggregateFunctions/Concatenate.so';
CREATE AGGREGATE FUNCTION agg_concatenate AS LANGUAGE 'C++' NAME 'ConcatenateFactory' LIBRARY AggregateFunctionsConcatenate;
Run Code Online (Sandbox Code Playgroud)

然后你可以执行如下查询:

select id, rtrim(agg_concatenate(name || ', '),', ') ag
from mytable
group by 1
order by 1
Run Code Online (Sandbox Code Playgroud)

使用 rtrim 去掉最后一个 ', '。

如果您需要以某种方式对聚合进行排序,您可能需要在内联视图中或首先进行选择/排序。