Maison >base de données >tutoriel mysql >Comment créer un tableau croisé dynamique affichant les prix moyens des maisons par quartier et nombre de chambres dans PostgreSQL ?
Problème :Comment générer un tableau récapitulatif montrant les prix moyens des logements, ventilés par quartier et nombre de chambres ?
Solution : Cela implique un processus en deux étapes utilisant la fonction crosstab
de PostgreSQL (à partir de l'extension tablefunc
).
<code class="language-sql">SELECT neighborhood, bedrooms, AVG(price) AS average_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms;</code>
crosstab
: Ensuite, nous introduisons les résultats de l'étape 1 dans la fonction crosstab
. Cette fonction transforme les données en tableau croisé dynamique. Le deuxième argument spécifie le nombre de chambres que nous voulons sous forme de colonnes. Notez que vous devrez installer l'extension tablefunc
si ce n'est pas déjà fait (CREATE EXTENSION tablefunc;
).<code class="language-sql">SELECT * FROM crosstab( 'SELECT neighborhood, bedrooms, AVG(price)::int AS average_price FROM listings GROUP BY neighborhood, bedrooms ORDER BY neighborhood, bedrooms', $$SELECT unnest('{0,1,2,3}'::int[]) AS bedrooms$$ ) AS ct ("neighborhood" text, "0" int, "1" int, "2" int, "3" int);</code>
Cette requête produit un tableau croisé dynamique avec les quartiers sous forme de lignes et le prix moyen pour 0, 1, 2 et 3 chambres sous forme de colonnes. N'oubliez pas d'ajuster le tableau '{0,1,2,3}'
pour refléter le nombre réel de chambres présentes dans votre tableau listings
. Le casting ::int
garantit que le prix moyen est traité comme un nombre entier ; vous devrez peut-être ajuster cela en fonction du type de données de votre price
colonne.
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!