Sdílet prostřednictvím


string_agg agregační funkce

Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime 16.4 a novější

Vrátí zřetězené hodnoty STRING a BINARY ve skupině.

Tato funkce je aliasem pro funkci listagg.

Syntaxe

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 ]

Tuto funkci lze také vyvolat jako funkci okna pomocí OVER klauzule, pokud WITHIN GROUP je klauzule a FILTER klauzule vynechána.

Argumenty

  • expr

    Výraz, který se vyhodnotí jako STRING nebo BINARY. NULL hodnoty jsou ignorovány.

  • delimiter

    Konstantní výraz odpovídající typu použitého k oddělení zřetězených expr hodnot. Výchozí hodnota je prázdný řetězec ('') pro STRING binární hodnotu nulové délky (''::BINARY) pro BINARY.

  • ORDER BY

    Výraz použitý k seřazení hodnot před zřetězením. Výchozí hodnota je pořadí řádků ve skupině.

    • sortKey

      Výraz, na kterém je definováno pořadí. Odkazy na sortKey sloupce musí být rovněž obsaženy v expr.

    • sort_direction

      Určuje pořadí řazení pro pořadí podle výrazu.

      • ASC: Směr řazení pro tento výraz je vzestupný.
      • DESC: Pořadí řazení pro tento výraz je sestupné.

      Pokud není explicitně zadán směr řazení, jsou ve výchozím nastavení řádky seřazeny vzestupně.

    • pořadí řazení nul

      Volitelně určuje, jestli se hodnoty NULL vrátí před nebo za hodnotami, které nejsou null. Pokud není uvedeno null_sort_order, hodnoty NULL se seřadí jako první, pokud je pořadí řazení ASC, a jako poslední, pokud je pořadí řazení DESC.

      • NULLS FIRST: NULL Hodnoty se vrátí jako první bez ohledu na pořadí řazení.
      • NULLS LAST: NULL Hodnoty se vrátí jako poslední bez ohledu na pořadí řazení.
  • cond: Volitelný BOOLEAN výraz filtrující řádky použité pro agregaci.

Návraty

A STRING pokud expr je STRING, BINARY jinak.

Pokud DISTINCT je zadán, jsou agregovány pouze jedinečné hodnoty a sortKey se musí shodovat s expr.

Příklady

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