简介

group_concat
group_concat
函数用于将一组字符串值连接成一个单一的字符串。当处理多个行或记录时,此函数非常有用,可以将来自同一组的结果合并为一个字符串,通常用于报表生成和数据汇总场景。

语法

group_concat([DISTINCT] expression [ORDER BY sort_expr [ASC|DESC]] [SEPARATOR sep_string]) [FILTER (WHERE condition)]

参数

  • DISTINCT
    DISTINCT
    : (可选)去除重复值后再连接。
  • expression
    expression
    : 要连接的列或表达式。
  • ORDER BY sort_expr
    ORDER BY sort_expr
    : (可选)指定连接结果中元素的排序顺序。
  • sep_string
    sep_string
    : (可选)用作分隔符的字符串。如果省略,
    Lakehouse
    Lakehouse
    默认使用逗号(
    ,
    ,
    )作为分隔符。

返回结果

  • 返回一个字符串,其中包含连接后的所有非
    NULL
    NULL
    值,值之间由指定的分隔符分隔。

使用示例

  1. 基本使用:

SELECT a, group_concat(b SEPARATOR "-") FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) AS tab(a, b) GROUP BY a; +----+-------------------+ | a | WM_CONCAT('-', b) | +----+-------------------+ | A2 | 3 | | A1 | 2-1-1 | +----+-------------------+

  1. 使用 FILTER 子句条件性地连接字符串:

SELECT a, group_concat(b SEPARATOR "-") FILTER (WHERE b > 1) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 3) AS tab(a, b) GROUP BY a; +----+----------------------------------------------------+ | a | WM_CONCAT('-', b) FILTER (WHERE (b > 1)) | +----+----------------------------------------------------+ | A2 | 3 | | A1 | 2-3 | +----+----------------------------------------------------+

  1. 使用 ORDER BY 控制连接顺序:

SELECT a, group_concat(b ORDER BY b ASC SEPARATOR "-") FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 3) AS tab(a, b) GROUP BY a; -- A1 的结果为 1-2-3(升序排列)

  1. 使用 DISTINCT 去重:

SELECT a, group_concat(DISTINCT b SEPARATOR ",") FROM VALUES ('A1', 1), ('A1', 1), ('A1', 2) AS tab(a, b) GROUP BY a; -- A1 的结果为 1,2(去除重复的 1)

注意事项

  • 如果结果字符串超过系统设定的最大长度限制,
    group_concat
    group_concat
    可能会报错。在
    Lakehouse
    Lakehouse
    中,可以通过设置表属性
    cz.storage.write.max.string.bytes
    cz.storage.write.max.string.bytes
    系统变量来调整这个限制。
  • 在使用
    group_concat
    group_concat
    函数时,应注意
    NULL
    NULL
    值会被忽略,不会包含在最终的字符串中。

联系我们
预约咨询
微信咨询
电话咨询