当前位置: 首页 > 面试题库 >

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

西门嘉石
2023-03-14
问题内容

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

ID     |   name
1      |    AA
2      |    AB
2      |    AC
3      |    AD
3      |    AE
3      |    AF

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

ID    |  ag
1     |  AA
2     |  AB, AC
3     |  AD, AE, AF

问题答案:

首先,您需要为编译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;

然后,您可以执行如下查询:

select id, rtrim(agg_concatenate(name || ', '),', ') ag
from mytable
group by 1
order by 1

使用rtrim摆脱最后一个’,’。

如果您需要以某种方式对聚合进行排序,则可能需要在嵌入式视图中或使用first进行选择/排序。



 类似资料:
  • 问题内容: 我正在寻找一种将不同行中的字符串聚合为一行的方法。我希望在许多不同的地方进行此操作,因此具有促进此操作的功能会很好。我已经尝试过使用和解决方案,但它们只是不适合我。 字符串聚合将执行以下操作: 我看过CLR定义的聚合函数来代替和,但是显然 SQL Azure 不 支持CLR定义的东西,这让我很痛苦,因为我知道能够使用它可以解决很多问题。我的问题。 有什么可能的解决方法,或者类似的最优方

  • 问题内容: 我找到了一种将不同行中的字符串聚合到sybase ASE 15中的单行中的方法。像这样: T-SQL中的FOR XML PATH之类的东西。 谢谢! 问题答案: Sybase ASE没有任何字符串聚合函数,例如或; 并且虽然有对的支持,但不包括对选件/功能的支持。 假设要追加的行数未知/可变,则唯一的(ASE 15)T-SQL选项将是基于游标的解决方案。 如果发现自己正在使用ASE 1

  • 我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为文字(即0)- 这里有几行输出(每一行都是不同的system.out行): 这是输入文件上的三行: 如您所见,数字随系统一起添加和打印。从函数convertToWord中退出,但一旦返回main,就会丢失。如何跨函数将这些转换附加到字符串?

  • 问题内容: 我只是在学习MySQL-是否有组合(或嵌套)聚合函数的方法? 给定一个查询: 这将给我每个用户回答的问题数量。我真正想要的是每个用户回答的平均问题数量…… 计算此统计信息的正确方法是什么? 如果有可能,是否有办法针对每个问题分解此统计信息?(用户可以多次回答相同的问题)。就像是: 问题答案: 您必须使用子查询: 您不能将一个聚合与另一个聚合一起包装。如果MySQL支持分析/排序/窗口功

  • 我需要将字符串和Int串联起来,如下所示: 但它没有编译,错误如下: 二进制运算符“”不能应用于“String”和“Int”类型的操作数 连接字符串Int的正确方法是什么?

  • 问题内容: 有没有办法串联起来形成Java? 例: 问题答案: 用途: 单线: 这样做可以: 我前段时间问了有关问题。