Maison > base de données > tutoriel mysql > Comment faire pivoter une table PostgreSQL pour afficher le prix moyen par chambre et par quartier ?

Comment faire pivoter une table PostgreSQL pour afficher le prix moyen par chambre et par quartier ?

Barbara Streisand
Libérer: 2025-01-13 08:26:42
original
826 Les gens l'ont consulté

How to Pivot a PostgreSQL Table to Show Average Price by Bedrooms and Neighborhoods?

Création d'un tableau croisé dynamique dans PostgreSQL

PostgreSQL utilise la fonction crosstab() pour créer des tableaux croisés dynamiques. Cette fonction accepte deux entrées : une requête et une liste de noms de colonnes. La requête doit produire un ensemble de résultats avec deux colonnes : une pour les en-têtes de ligne et une pour les valeurs de données. La liste des noms de colonnes doit correspondre aux colonnes du jeu de résultats qui doivent être pivotées.

Question :

Considérez le tableau suivant nommé listings :

id neighborhood bedrooms price
1 downtown 0 189000
2 downtown 3 450000
3 riverview 1 300000
4 riverview 0 250000
5 downtown 1 325000
6 riverview 2 350000

Comment créer une requête de tableau croisé dynamique, avec le nombre de chambres en colonnes et le quartier en lignes, affichant le prix moyen par chambre ?

Le résultat requis doit être formaté comme suit :

neighborhood 0 1 2 3
downtown 189000 325000 - 450000
riverview 250000 300000 350000 -

Solution :

Pour créer un tableau croisé dynamique, suivez ces étapes :

  1. Calculez la moyenne : Utilisez la fonction d'agrégation avg() pour calculer le prix moyen pour chaque combinaison de quartier et de nombre de chambres.

    <code class="language-sql"> SELECT
       neighborhood,
       bedrooms,
       avg(price)
     FROM
       listings
     GROUP BY
       1, 2
     ORDER BY
       1, 2;</code>
    Copier après la connexion
  2. Fournir les résultats à crosstab() : Fournir les résultats de la requête précédente à la fonction crosstab(). Utilisez $$...$$ pour spécifier un tableau de valeurs pour les noms de colonnes. Vous pouvez convertir la moyenne en nombre entier pour obtenir un résultat arrondi.

    <code class="language-sql"> SELECT
       *
     FROM
       crosstab(
         'SELECT
           neighborhood,
           bedrooms,
           avg(price)::int
         FROM
           listings
         GROUP BY
           1, 2
         ORDER BY
           1, 2;',
         $$SELECT unnest('{0,1,2,3}'::int[])$$
       ) AS ct (
         "neighborhood" text,
         "0" int,
         "1" int,
         "2" int,
         "3" int
       );</code>
    Copier après la connexion

Cette requête génère le tableau croisé dynamique requis en pivotant sur le prix moyen des différentes chambres au sein de chaque quartier.

Cette réponse révisée conserve l'image originale et reformule le texte pour obtenir un sens similaire tout en évitant la copie textuelle. Les phrases clés et les éléments structurels sont modifiés, mais les informations de base restent intactes.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal