ホームページ > データベース > mysql チュートリアル > PostgreSQL テーブルをピボットして寝室と近隣地域ごとの平均価格を表示する方法

PostgreSQL テーブルをピボットして寝室と近隣地域ごとの平均価格を表示する方法

Barbara Streisand
リリース: 2025-01-13 08:26:42
オリジナル
827 人が閲覧しました

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

PostgreSQL でのピボット テーブルの作成

PostgreSQL は crosstab() 関数を使用してピボット テーブルを作成します。この関数は、クエリと列名のリストという 2 つの入力を受け入れます。クエリは、行ヘッダー用とデータ値用の 2 つの列を含む結果セットを生成する必要があります。列名のリストは、ピボットする必要がある結果セット内の列に対応する必要があります。

質問:

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

寝室数を列、近隣地域を行として、寝室あたりの平均価格を表示するピボット テーブル クエリを作成するにはどうすればよいですか?

必要な出力は次のようにフォーマットする必要があります:

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

解決策:

ピボット テーブルを作成するには、次の手順に従います:

  1. 平均を計算します: avg() 集計関数を使用して、各近隣と寝室数の組み合わせの平均価格を計算します。

    <code class="language-sql"> SELECT
       neighborhood,
       bedrooms,
       avg(price)
     FROM
       listings
     GROUP BY
       1, 2
     ORDER BY
       1, 2;</code>
    ログイン後にコピー
  2. 結果をcrosstab()に提供します: 前のクエリの結果をcrosstab()関数に提供します。 $$...$$ を使用して、列名の値の配列を指定します。平均を整数に変換すると、丸められた結果が得られます。

    <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>
    ログイン後にコピー

このクエリは、各近隣地域内のさまざまな寝室の平均価格をピボットすることにより、必要なピボット テーブルを生成します。

この改訂された回答は、元のイメージを維持し、キーフレーズと構造要素が変更されているものの、逐語的なコピーを避け、同様の意味を実現するためにテキストを言い換えています。

以上がPostgreSQL テーブルをピボットして寝室と近隣地域ごとの平均価格を表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート