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)
首先,您需要编译 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 去掉最后一个 ', '。
如果您需要以某种方式对聚合进行排序,您可能需要在内联视图中或首先进行选择/排序。
| 归档时间: |
|
| 查看次数: |
3190 次 |
| 最近记录: |