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