共用方式為


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

      依表達式指定順序的排序順序。

      • ASC:此表達式的排序方向為遞增。
      • DESC:此表達式的排序順序為遞減。

      如果未明確指定排序方向,則預設數據列會以遞增方式排序。

    • 空值排序順序

      選擇性地指定是否在非 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