Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Funzione finestra LISTAGG
Per ogni gruppo in una query, la funzione finestra LISTAGG ordina le righe di quel gruppo in base all'espressione ORDER BY, quindi concatena i valori in un'unica stringa.
LISTAGG è una funzione solo del nodo di calcolo. La funzione restituisce un errore se la query non fa riferimento a una tabella o a una tabella di AWS Clean Rooms sistema definita dall'utente.
Sintassi
LISTAGG( [DISTINCT] expression [, 'delimiter' ] ) [ WITHIN GROUP (ORDER BY order_list) ] OVER ( [PARTITION BY partition_expression] )
Argomenti
- DISTINCT
-
(Facoltativo) Una clausola che elimina i valori duplicati dall'espressione specificata prima della concatenazione. Gli spazi finali vengono ignorati, quindi le stringhe
'a'
e'a '
vengono trattate come duplicati. LISTAGG usa il primo valore incontrato. Per ulteriori informazioni, consultare Significato degli spazi finali. - aggregate_expression
-
Qualsiasi espressione valida (come il nome di una colonna) che fornisce i valori da aggregare. I valori NULL e le stringhe vuote vengono ignorati.
- delimiter
-
(Facoltativo) La costante di stringa per separare i valori concatenati. Il valore predefinito è NULL.
AWS Clean Rooms supporta qualsiasi quantità di spazi bianchi iniziali o finali attorno a una virgola o due punti facoltativi, nonché una stringa vuota o un numero qualsiasi di spazi.
Esempi di valori validi sono:
", "
": "
" "
- WITHIN GROUP (ORDER BY order_list)
-
(Facoltativo) Una clausola che specifica l'ordinamento dei valori aggregati. Deterministico solo se ORDER BY fornisce un ordinamento univoco. L'impostazione predefinita è quella di aggregare tutte le righe e restituire un valore singolo.
- OVER
-
Una clausola che specifica il partizionamento della finestra. La clausola OVER non può contenere una specifica del frame della finestra o dell'ordinamento della finestra.
- PARTITION BY partition_expression
-
(Facoltativo) Imposta l'intervallo di registrazioni per ciascun gruppo nella clausola OVER.
Valori restituiti
VARCHAR(MAX). Se l'insieme dei risultati è maggiore della dimensione massima di VARCHAR (64K - 1, oppure 65535), allora LISTAGG restituisce il seguente errore:
Invalid operation: Result size exceeds LISTAGG limit
Esempi
Gli esempi seguenti usano la tabella WINSALES. Per una descrizione della tabella WINSALES, consultare Tabella di esempio per gli esempi della funzione finestra.
L'esempio seguente restituisce un elenco di ID venditore, ordinati per ID venditore.
select listagg(sellerid) within group (order by sellerid) over() from winsales; listagg ------------ 11122333344 ... ... 11122333344 11122333344 (11 rows)
L'esempio seguente restituisce un elenco di ID venditore per acquirente B, ordinati in base alla data.
select listagg(sellerid) within group (order by dateid) over () as seller from winsales where buyerid = 'b' ; seller --------- 3233 3233 3233 3233 (4 rows)
Il seguente esempio restituisce un elenco separato dalla virgola di date di vendita per l'acquirente B.
select listagg(dateid,',') within group (order by sellerid desc,salesid asc) over () as dates from winsales where buyerid = 'b'; dates ------------------------------------------- 2003-08-02,2004-04-18,2004-04-18,2004-02-12 2003-08-02,2004-04-18,2004-04-18,2004-02-12 2003-08-02,2004-04-18,2004-04-18,2004-02-12 2003-08-02,2004-04-18,2004-04-18,2004-02-12 (4 rows)
Il seguente esempio utilizza DISTINCT per restituire un elenco di date di vendita univoche per l'acquirente B.
select listagg(distinct dateid,',') within group (order by sellerid desc,salesid asc) over () as dates from winsales where buyerid = 'b'; dates -------------------------------- 2003-08-02,2004-04-18,2004-02-12 2003-08-02,2004-04-18,2004-02-12 2003-08-02,2004-04-18,2004-02-12 2003-08-02,2004-04-18,2004-02-12 (4 rows)
Il seguente esempio restituisce un elenco separato dalla virgola di ID di vendita per ciascun ID acquirente.
select buyerid, listagg(salesid,',') within group (order by salesid) over (partition by buyerid) as sales_id from winsales order by buyerid; buyerid | sales_id -----------+------------------------ a |10005,40001,40005 a |10005,40001,40005 a |10005,40001,40005 b |20001,30001,30004,30003 b |20001,30001,30004,30003 b |20001,30001,30004,30003 b |20001,30001,30004,30003 c |10001,20002,30007,10006 c |10001,20002,30007,10006 c |10001,20002,30007,10006 c |10001,20002,30007,10006 (11 rows)