Génération de tableaux croisés dynamiques dans PostgreSQL pour analyser les prix des logements
PostgreSQL offre de puissantes fonctionnalités de synthèse des données, notamment la création de tableaux croisés dynamiques. Cet exemple montre comment générer un tableau croisé dynamique affichant les prix moyens des logements regroupés par quartier et nombre de chambres.
Étape 1 : Calculer les prix moyens par quartier et le nombre de chambres
Tout d'abord, nous calculons le prix moyen pour chaque combinaison unique de quartier et de nombre de chambres :
<code class="language-sql">SELECT neighborhood, bedrooms, AVG(price) AS avg_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms;</code>
Cette requête regroupe les données de la table listings
par neighborhood
et bedrooms
, en calculant la moyenne price
pour chaque groupe. Les résultats sont ensuite ordonnés pour plus de clarté.
Étape 2 : faire pivoter les données à l'aide de crosstab()
Pour transformer les données agrégées au format tableau croisé dynamique, nous utilisons la fonction crosstab()
:
<code class="language-sql">SELECT * FROM crosstab( 'SELECT neighborhood, bedrooms, avg_price FROM ( SELECT neighborhood, bedrooms, AVG(price) AS avg_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms )', $$SELECT unnest('{0,1,2,3}'::int[])::text$$ ) AS ct ("neighborhood" text, "0" int, "1" int, "2" int, "3" int);</code>
La fonction crosstab()
prend deux arguments : la requête SQL fournissant les données agrégées (imbriquées dans ce cas pour plus de clarté), et une requête définissant les catégories pour les colonnes du tableau croisé dynamique (ici, représentant le nombre de chambres : 0, 1, 2 et 3). L'alias de table résultant ct
se voit attribuer des noms de colonnes en conséquence.
Étape 3 : Interprétation des résultats
Le tableau croisé dynamique de sortie ressemblera à ceci :
<code>neighborhood | 0 | 1 | 2 | 3 ----------------+---------+---------+---------+--------- downtown | 189000 | 325000 | NULL | 450000 riverview | 250000 | 300000 | 350000 | NULL</code>
Chaque ligne représente un quartier et chaque colonne représente un nombre de chambres. Les valeurs représentent le prix moyen pour cette combinaison spécifique de quartier et de chambre. NULL
indique qu'aucune annonce n'a été trouvée pour cette combinaison particulière. Cela fournit un résumé clair et concis des prix moyens des logements. N'oubliez pas d'ajuster les catégories de chambres dans la fonction unnest
si vos données incluent une plage différente de nombres de chambres.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!