简介

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

语法

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

参数

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

返回结果

  • 返回一个字符串,其中包含连接后的所有非 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 可能会报错。在 Lakehouse 中,可以通过设置表属性 cz.storage.write.max.string.bytes 系统变量来调整这个限制。
  • 在使用 group_concat 函数时,应注意 NULL 值会被忽略,不会包含在最终的字符串中。

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