次の方法で共有


string_agg 集計関数

適用対象:チェックが「はい」とマークされている 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の場合は長さ 0 のバイナリ (BINARY) です。

  • ORDER BY

    連結の前に値を並べ替えるために使用される式。 既定値は、グループ内の行の順序です。

    • sortKey

      順序が定義されている式。 sortKey内の列参照もexprに存在する必要があります。

    • sort_direction

      order by 式の並べ替え順序を指定します。

      • ASC: この式の並べ替え方向は昇順です。
      • DESC: この式の並べ替え方向は降順です。

      並べ替えの方向が明示的に指定されていない場合、既定では行が昇順に並べ替えられます。

    • nullの並び順

      Null 値を非 Null 値の前に返すか後に返すかを指定します (省略可能)。 null_sort_order が指定されていない場合、並べ替え順序が ASC の場合は最初に NULL が並べ替えられ、並べ替え順序が DESC の場合は最後に NULL が並べ替えられます。

      • NULLS FIRST: NULL 値は、並べ替え順序に関係なく、最初に返されます。
      • NULLS LAST: NULL 値は、並べ替え順序に関係なく最後に返されます。
  • cond: 集計に使用される行をフィルター処理する BOOLEAN 式 (省略可能)。

返品ポリシー

STRINGexpr の場合は STRING、そうでない場合は BINARY です。

DISTINCTが指定されている場合は、一意の値のみが集計され、sortKeyexprと一致する必要があります。

例示

-- 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