Поделиться через


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) для BINARY.

  • ORDER BY

    Выражение, используемое для упорядочивания значений перед объединением. Значение по умолчанию — это порядок строк в группе.

    • sortKey

      Выражение, для которого определен порядок. Ссылки на столбцы в sortKey также должны присутствовать в expr.

    • sort_direction

      Указывает порядок сортировки для выражения ORDER BY.

      • ASC: направление сортировки для этого выражения восходящее.
      • DESC: направление сортировки "по убыванию" для этого выражения.

      Если направление сортировки не указано явно, по умолчанию строки сортируются по возрастанию.

    • порядок сортировки нулевых значений

      При необходимости указывает, возвращаются ли значения NULL до или после значений, отличных от NULL. Если параметр null_sort_order не указан, то значения NULL сортируются в начале, когда порядок сортировки имеет значение ASC, или в конце, когда для порядка сортировки задано значение DESC.

      • 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