适用于: Databricks SQL
Databricks Runtime 16.4 及更高版本
返回组内串联的 STRING
和 BINARY
值。
此函数是 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
计算结果为
STRING
或BINARY
的表达式。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 FIRST
:NULL
值首先返回,而不考虑排序顺序。 -
NULLS LAST
:无论排序顺序如何,NULL
值都会最后返回。
-
cond
:一个可选的BOOLEAN
表达式,可筛选用于聚合的行。
退货
如果STRING
是expr
,则为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