string_agg 聚合函数

适用于:选中 Databricks SQL 选中 Databricks Runtime 16.4 及更高版本

返回组内串联的 STRINGBINARY 值。

此函数是 listagg 函数的别名。

语法

string_agg ( [ALL | DISTINCT] expr [, delimiter] )
  [ WITHIN GROUP (ORDER BY { sortKey [ sort_direction ] [ nulls_sort_oder ] } [, ...] ) ]
  [ FILTER ( WHERE cond ) ]

sort_direction
  [ ASC | DESC ]

nulls_sort_order
  [ NULLS FIRST | NULLS LAST ]

在省略子句与OVER子句的情况下,可以通过WITHIN GROUP子句将此函数作为FILTER调用。

论据

  • expr

    计算结果为 STRINGBINARY 的表达式。 NULL 值将被忽略。

  • delimiter

    与类型 expr 匹配的常量表达式,用于分隔连接后的值。 默认值是''的空字符串(STRING)以及''::BINARY的零长度二进制(BINARY)。

  • ORDER BY

    用于在串联之前对值进行排序的表达式。 默认值是组中行的顺序。

    • sortKey

      定义顺序的表达式。 内部 sortKey 的列引用也必须存在于 expr

    • sort_direction

      指定 order by 表达式的排序顺序。

      • ASC:此表达式的排序方向为升序。
      • DESC:此表达式的排序顺序为降序。

      如果未显式指定排序方向,则默认按升序对行排序。

    • nulls_sort_order

      可选择指定是在非 NULL 值之前还是之后返回 NULL 值。 如果未指定 null_sort_order,则在排序顺序为 ASC 时,Null 排在前面;排序顺序为 DESC 时,Null 排在后面。

      • NULLS FIRSTNULL 值首先返回,而不考虑排序顺序。
      • NULLS LAST:无论排序顺序如何,NULL 值都会最后返回。
  • cond:一个可选的 BOOLEAN 表达式,可筛选用于聚合的行。

退货

如果STRINGexpr,则为STRING;否则为BINARY

如果 DISTINCT 只指定了唯一值,则这些值会被汇总,并且 sortKey 必须匹配 expr

例子

-- Simple example with default delimiter
> SELECT string_agg(col) FROM VALUES ('a'), ('b'), ('c') AS tab(col);
  acb

-- Simple example with explicit delimiter
> SELECT string_agg(col, ', ') FROM VALUES ('a'), ('b'), ('c') AS tab(col);
  b, a, c

-- Example with nulls
> SELECT string_agg(col) FROM VALUES ('a'), (NULL), ('c') AS tab(col);
  ac

-- Example with explicit order
> SELECT string_agg(col) WITHIN GROUP (ORDER BY col DESC)
    FROM VALUES ('a'), ('b'), ('c') AS tab(col);
  cba

-- Example with DISTINCT
> SELECT string_agg(DISTINCT col)
    FROM VALUES ('a'), ('a'), ('b') AS tab(col);
  ab

-- Example of FUNCTION_AND_ORDER_EXPRESSION_MISMATCH
> SELECT string_agg(DISTINCT col) WITHIN GROUP (ORDER BY id DESC)
    FROM VALUES (1, 'a'), (2, 'b'), (3, 'c') AS tab(id, col);
  Error: [INVALID_WITHIN_GROUP_EXPRESSION.MISMATCH_WITH_DISTINCT_INPUT

-- Example with `BINARY`
> SELECT hex(string_agg(col::binary, x'00'))
    FROM VALUES (1, 'a'), (2, 'b'), (3, 'c') AS tab(id, col);
  6100630062