Funzione finestra LISTAGG - Amazon Redshift

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 definita dall'utente o a una tabella di sistema di Amazon Redshift. Per ulteriori informazioni, consulta Query sulle tabelle di catalogo.

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 separerà i valori concatenati. Il valore predefinito è NULL.

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

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

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

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,30003,30004 | | b | 20001,30001,30003,30004 | | b | 20001,30001,30003,30004 | | b | 20001,30001,30003,30004 | | c | 10001,10006,20002,30007 | | c | 10001,10006,20002,30007 | | c | 10001,10006,20002,30007 | | c | 10001,10006,20002,30007 | +---------+-------------------------+