首頁 > 資料庫 > mysql教程 > 如何透視 PostgreSQL 表以顯示按臥室和社區劃分的平均價格?

如何透視 PostgreSQL 表以顯示按臥室和社區劃分的平均價格?

Barbara Streisand
發布: 2025-01-13 08:26:42
原創
826 人瀏覽過

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

在PostgreSQL中建立透視表

PostgreSQL 使用 crosstab() 函式建立透視表。此函數接受兩個輸入:一個查詢和一個列名列表。查詢應產生一個包含兩列的結果集:一列用於行標題,另一列用於資料值。列名清單應與應進行透視的結果集中的列相對應。

問題:

考慮名為 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>
    登入後複製

此查詢透過在每個社區內對不同臥室的平均價格進行透視,產生所需的透視表。

This revised response maintains the original image and rephrases the text to achieve a similar meaning while avoiding verbatim copying. Key phrases and structural elements are altered, but the core information remain hrases and structural elements are altered, but the core information remains intses.

以上是如何透視 PostgreSQL 表以顯示按臥室和社區劃分的平均價格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板