ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB STRING_AGG函数

YashanDB STRING_AGG函数

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-08-01 15:54:01 0 删除 编辑

STRING_AGG

语法图

STRING_AGG函数将多行的数据执行拼接操作,并通过分隔符分隔,返回一行CLOB类型的字符串。本函数与 GROUP_CONCAT函数实现功能类似。

本函数不支持向量化计算。

DISTINCT

计算最终拼接结果时,过滤在同一组内出现的重复的行。

ALL

默认值,表示不过滤重复的行,对所有行都进行拼接。

string

string可以为:

  • 通用表达式 expr

  • 查询列为单列且返回行为单行的子查询

string的值须为字符型,或可转换为字符型的其他类型(LOB、XMLTYPE类型支持隐式转换),但不允许为JSON、NVARCHAR、NCHAR和NCLOB类型。

当string的值为NULL时,函数返回NULL。

separator

指定将组内的多行进行拼接时,多行之间加上separator定义的分隔符,separator为character类的常量或常量表达式。

separator必须指定,但可以指定为NULL。

order_by_clause

对组内要CONCAT的string排序,其语法与SELECT语句中描述一致。

当ORDER BY后指定的是常量数字时,表示的是string的顺序值。

示例(HEAP表)

--创建exprs_string_agg表,并插入数据CREATE TABLE exprs_string_agg (id INT,name VARCHAR(50),money FLOAT);INSERT INTO exprs_string_agg 
VALUES  (1,'小东',10000),(2,'小明',46450),
        (3,'小红',46450 ),(4,'小东',14465),
        (5,'小明',46450),(6,'小东',46450);--未指定GROUP BY时,将所有行CONCAT,得到一行结果SELECT STRING_AGG(MONEY,',') AS money FROM exprs_string_agg;MONEY                                                            
---------------------------------------------------------------- 1.0E+004,4.645E+004,4.645E+004,1.4465E+004,4.645E+004,4.645E+004--group by后各组的多行数据分别CONCAT成一行,得到按组的多行结果SELECT NAME,STRING_AGG(money,',') AS money FROM exprs_string_agg GROUP BY name;NAME                       MONEY                                
-------------------------- ------------------------------------ 小东                     1.0E+004,1.4465E+004,4.645E+004     小明                     4.645E+004,4.645E+004               小红                     4.645E+004                          --使用order by子句排序SELECT NAME,STRING_AGG(money,',' ORDER BY id DESC) AS money FROM exprs_string_agg GROUP BY name;NAME                     MONEY                               
------------------------ ------------------------------------小东                   4.645E+004,1.4465E+004,1.0E+004       小明                   4.645E+004,4.645E+004                 小红                   4.645E+004      --使用DISTINCT关键字去重SELECT STRING_AGG(DISTINCT name,',') AS names FROM exprs_string_agg;NAMES----------------------------------------------------------------小东,小明,小红
代码
string_agg::= STRING_AGG "(" [DISTINCT|ALL] string "," separator [order_by_clause] ")"

STRING_AGG函数将多行的数据执行拼接操作,并通过分隔符分隔,返回一行CLOB类型的字符串。本函数与 GROUP_CONCAT函数实现功能类似。

本函数不支持向量化计算。

DISTINCT

计算最终拼接结果时,过滤在同一组内出现的重复的行。

ALL

默认值,表示不过滤重复的行,对所有行都进行拼接。

string

string可以为:

  • 通用表达式 expr

  • 查询列为单列且返回行为单行的子查询

string的值须为字符型,或可转换为字符型的其他类型(LOB、XMLTYPE类型支持隐式转换),但不允许为JSON、NVARCHAR、NCHAR和NCLOB类型。

当string的值为NULL时,函数返回NULL。

separator

指定将组内的多行进行拼接时,多行之间加上separator定义的分隔符,separator为character类的常量或常量表达式。

separator必须指定,但可以指定为NULL。

order_by_clause

对组内要CONCAT的string排序,其语法与SELECT语句中描述一致。

当ORDER BY后指定的是常量数字时,表示的是string的顺序值。

示例(HEAP表)

--创建exprs_string_agg表,并插入数据CREATE TABLE exprs_string_agg (id INT,name VARCHAR(50),money FLOAT);INSERT INTO exprs_string_agg 
VALUES  (1,'小东',10000),(2,'小明',46450),
        (3,'小红',46450 ),(4,'小东',14465),
        (5,'小明',46450),(6,'小东',46450);--未指定GROUP BY时,将所有行CONCAT,得到一行结果SELECT STRING_AGG(MONEY,',') AS money FROM exprs_string_agg;MONEY                                                            
---------------------------------------------------------------- 1.0E+004,4.645E+004,4.645E+004,1.4465E+004,4.645E+004,4.645E+004--group by后各组的多行数据分别CONCAT成一行,得到按组的多行结果SELECT NAME,STRING_AGG(money,',') AS money FROM exprs_string_agg GROUP BY name;NAME                       MONEY                                
-------------------------- ------------------------------------ 小东                     1.0E+004,1.4465E+004,4.645E+004     小明                     4.645E+004,4.645E+004               小红                     4.645E+004                          --使用order by子句排序SELECT NAME,STRING_AGG(money,',' ORDER BY id DESC) AS money FROM exprs_string_agg GROUP BY name;NAME                     MONEY                               
------------------------ ------------------------------------小东                   4.645E+004,1.4465E+004,1.0E+004       小明                   4.645E+004,4.645E+004                 小红                   4.645E+004      --使用DISTINCT关键字去重SELECT STRING_AGG(DISTINCT name,',') AS names FROM exprs_string_agg;NAMES----------------------------------------------------------------小东,小明,小红


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3092602/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639734