假设我们有这样的数据:
date | campaign | raw | unq
------------+----------+-----+-----
2016-06-01 | camp1 | 5 | 1
2016-06-01 | camp2 | 10 | 1
2016-06-01 | camp3 | 15 | 2
2016-06-02 | camp4 | 5 | 3
2016-06-02 | camp1 | 5 | 1
我需要以这样的方式对其进行分组以获得以下结果:
date | campaigns | raw | unq
------------+---------------------+----- +-----
2016-06-01 | camp1, camp2, camp3 | 30 | 4
2016-06-02 | camp4, camp1 | 10 | 4
出于这些目的,Mysql 有一个函数 GROUP_CONCAT。
Vertica还支持GROUP_CONCAT,但由于OVER子句和强制分区,我无法进行正确的查询
假设您已经编译并创建了该函数sdk/examples
目录,您应该能够执行以下操作:
select date, sum(raw) "raw", sum(unq) unq, rtrim(agg_concatenate(campaign || ', '),', ')
from mytest
group by 1
order by 1
我使用 rtrim 去掉最后一个 ', '。
如果您还没有创建它,您可以这样做:
-- 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)