LISTAGGfonction - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

LISTAGGfonction

Pour chaque groupe d'une requête, la fonction d'LISTAGGagrégation classe les lignes de ce groupe en fonction de l'expression ORDER BY, puis concatène les valeurs en une seule chaîne.

Syntaxe

LISTAGG( [DISTINCT] aggregate_expression [, 'delimiter' ] ) [ WITHIN GROUP (ORDER BY order_list) ]

Arguments

DISTINCT

Clause qui supprime toutes les valeurs en double dans l’expression spécifiée avant de procéder à la concaténation. Les espaces de fin sont ignorés. Par exemple, les chaînes 'a' et 'a ' sont traitées comme des doublons. LISTAGGutilise la première valeur détectée. Pour de plus amples informations, veuillez consulter Signification des blancs de fin.

aggregate_expression

Toute expression valide, comme un nom de colonne, qui fournit les valeurs à regrouper. NULLles valeurs et les chaînes vides sont ignorées.

delimiter

Constante de chaîne qui sépare les valeurs concaténées. La valeur par défaut estNULL.

WITHINGROUP(ORDERPAR order_list)

Clause qui spécifie l’ordre de tri des valeurs regroupées.

Renvoie

VARCHAR(MAX). Si le jeu de résultats est supérieur à la VARCHAR taille maximale, LISTAGG renvoie l'erreur suivante :

Invalid operation: Result size exceeds LISTAGG limit

Notes d’utilisation

  • Si une instruction inclut plusieurs LISTAGG fonctions qui utilisent WITHIN GROUP des clauses, chaque WITHIN GROUP clause doit utiliser les mêmes valeurs ORDER BY.

    Par exemple, l’instruction suivante renvoie une erreur.

    SELECT LISTAGG(sellerid) WITHIN GROUP (ORDER BY dateid) AS sellers, LISTAGG(dateid) WITHIN GROUP (ORDER BY sellerid) AS dates FROM sales;

    L’instruction suivante s’exécute avec succès.

    SELECT LISTAGG(sellerid) WITHIN GROUP (ORDER BY dateid) AS sellers, LISTAGG(dateid) WITHIN GROUP (ORDER BY dateid) AS dates FROM sales; SELECT LISTAGG(sellerid) WITHIN GROUP (ORDER BY dateid) AS sellers, LISTAGG(dateid) AS dates FROM sales;

Exemples

L'exemple suivant regroupe les vendeursIDs, triés par numéro de vendeur.

SELECT LISTAGG(sellerid, ', ') WITHIN GROUP (ORDER BY sellerid) FROM sales WHERE eventid = 4337; listagg ---------------------------------------------------------------------------------------------------------------------------------------- 380, 380, 1178, 1178, 1178, 2731, 8117, 12905, 32043, 32043, 32043, 32432, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 47188, 48294

L'exemple suivant permet DISTINCT de renvoyer une liste de vendeurs uniquesIDs.

SELECT LISTAGG(DISTINCT sellerid, ', ') WITHIN GROUP (ORDER BY sellerid) FROM sales WHERE eventid = 4337; listagg ------------------------------------------------------------------------------------------- 380, 1178, 2731, 8117, 12905, 32043, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 48294

L'exemple suivant regroupe les vendeurs par ordre IDs chronologique.

SELECT LISTAGG(sellerid, ', ') WITHIN GROUP (ORDER BY dateid) FROM sales WHERE eventid = 4337; listagg ----------------------------------------------------------------------------------------------------------------------------------------- 41498, 47188, 47188, 1178, 1178, 1178, 380, 45676, 46324, 48294, 32043, 32043, 32432, 12905, 8117, 38750, 2731, 32432, 32043, 380, 38669

L’exemple suivant renvoie une liste des dates de ventes de l’acheteur ID 660 séparées par des barres verticales.

SELECT LISTAGG( (SELECT caldate FROM date WHERE date.dateid=sales.dateid), ' | ' ) WITHIN GROUP (ORDER BY sellerid DESC, salesid ASC) FROM sales WHERE buyerid = 660; listagg ------------------------------------------------- 2008-07-16 | 2008-07-09 | 2008-01-01 | 2008-10-26

L'exemple suivant renvoie une liste des ventes séparées par des IDs virgules pour les acheteurs IDs 660, 661 et 662.

SELECT buyerid, LISTAGG(salesid,', ') WITHIN GROUP (ORDER BY salesid) AS sales_id FROM sales WHERE buyerid BETWEEN 660 AND 662 GROUP BY buyerid ORDER BY buyerid; buyerid | sales_id --------+----------------------------------------------------- 660 | 32872, 33095, 33514, 34548 661 | 19951, 20517, 21695, 21931 662 | 3318, 3823, 4215, 51980, 53202, 55908, 57832, 171603