SQL - Comment utiliser ARRAY_AGG() ?

SQL - Comment utiliser ARRAY_AGG() ?

Date de sortie
August 20, 2024
Auteur
Bertrand Fabre
“Comment je peux créer un ARRAY avec des champs classiques en groupant mes données ?

Il peut parfois être intéressant de regrouper les valeurs d’une colonne à une nouvelle granularité.

Pour se faciliter la tâche, il y a une fonction qui peut nous aider à réaliser cela : ARRAY_AGG().

Syntaxe

SELECT
	granularitéPrincipale,
	ARRAY_AGG(colonneARegrouper) AS nomDeLaColonneRegroupée
FROM lesDonnées
GROUP BY granularitéPrincipale;

Je ne l’ai pas précisé au début mais ARRAY_AGG() est une fonction d’agrégation et nécessite donc de préciser son niveau d’agrégation dans un GROUP BY.

Un exemple pour y voir plus clair

Je vous propose un exemple pour que l’utilisation de l’ARRAY_AGG() vous semble plus intuitif.

WITH purchases AS (
    SELECT 'C001' AS customer_id, '2024-08-01' AS purchase_date, 'Laptop' AS product UNION ALL
    SELECT 'C001', '2024-08-01', 'Mouse' UNION ALL
    SELECT 'C002', '2024-08-02', 'Smartphone' UNION ALL
    SELECT 'C002', '2024-08-02', 'Charger' UNION ALL
    SELECT 'C003', '2024-08-03', 'Tablet'
)
SELECT 
    customer_id,
    ARRAY_AGG(product) AS products_purchased
FROM purchases
GROUP BY customer_id
;

Ici nous avons des données avec pour chaque enregistrement l’achat d’un client à une date.

Ce que l’on souhaite obtenir dans l’exemple, est une sortie avec la liste des achats regroupée dans un ARRAY pour chaque client.

Le résultat

Ligne
customer_id
products_purchased
1
C001
Laptop
Mouse
2
C002
Smartphone
Charger
3
C003
Tablet

Nous obtenons donc une ligne par client et un tableau (ARRAY) de ses achats !

Merci de votre lecture !