Agréger des données JSON
Dans cette étape, nous allons explorer comment agréger des données stockées dans des colonnes JSONB
dans PostgreSQL.
Tout d'abord, connectez-vous à la base de données PostgreSQL en utilisant la commande psql
en tant qu'utilisateur postgres
:
sudo -u postgres psql
L'agrégation de données JSONB
implique souvent l'extraction de valeurs à partir des objets JSONB
, puis l'application de fonctions d'agrégation telles que SUM
(SOMME), AVG
(MOYENNE), MIN
(MINIMUM), MAX
(MAXIMUM) et COUNT
(COMPTE).
Pour calculer le prix moyen de tous les produits, vous pouvez utiliser la requête suivante :
SELECT AVG((data ->> 'price')::numeric) FROM products;
Ici, nous extrayons le price
(prix) sous forme de texte en utilisant ->>
, nous le convertissons en un type numérique, puis nous calculons la moyenne en utilisant la fonction AVG
.
Ajoutons un champ "category" (catégorie) à nos produits :
UPDATE products SET data = jsonb_set(data, '{category}', '"Electronics"'::JSONB) WHERE id IN (1,4,5);
UPDATE products SET data = jsonb_set(data, '{category}', '"Accessories"'::JSONB) WHERE id IN (2,3);
UPDATE products SET data = jsonb_set(data, '{category}', '"Computers"'::JSONB) WHERE id IN (6);
Maintenant, nous pouvons compter le nombre de produits dans chaque catégorie :
SELECT data ->> 'category', COUNT(*) FROM products GROUP BY data ->> 'category';
Cette requête extrait la valeur category
(catégorie) sous forme de texte et regroupe les lignes en fonction de cette valeur.
Calculons le prix total de tous les produits dans la catégorie "Electronics" (Électronique).
SELECT SUM((data ->> 'price')::numeric) FROM products WHERE data ->> 'category' = 'Electronics';
Cette requête devrait renvoyer la somme des prix du Laptop (Ordinateur portable), du Monitor (Moniteur) et du Gaming PC (PC de jeu).
Enfin, quittez l'interpréteur psql
:
\q