首頁 > 資料庫 > mysql教程 > 如何使用 crosstab() 函數在 PostgreSQL 中建立資料透視表?

如何使用 crosstab() 函數在 PostgreSQL 中建立資料透視表?

Linda Hamilton
發布: 2025-01-13 12:13:44
原創
156 人瀏覽過

How to Create Pivot Tables in PostgreSQL Using the crosstab() Function?

使用PostgreSQL和crosstab()函數建立透視表

資料分析經常涉及探索不同變數之間的關係。透視表是一種強大的工具,可以對資料進行匯總和呈現,從而輕鬆識別趨勢和模式。本文示範如何使用PostgreSQL建立透視表。

問題:

假設您在PostgreSQL中有一個名為listings的表,包含以下列:

  • id
  • neighborhood(街區)
  • bedrooms(臥室數量)
  • price(價格)

您需要建立一個交叉表查詢,顯示每個街區的平均價格,其中臥室數量作為列,街區作為行。輸出應採用以下格式:

街区 0 1 2 3
市中心 189000 325000 - 450000
河景 250000 300000 350000 -

解:

要在PostgreSQL中建立透視表,您可以結合使用AVG()聚合函數和tablefunc模組提供的crosstab()函數。以下是逐步指南:

  1. 計算每個臥室數量的平均價格:
<code class="language-sql">SELECT neighborhood, bedrooms, AVG(price)
FROM listings
GROUP BY 1, 2
ORDER BY 1, 2;</code>
登入後複製
  1. 建立交叉表查詢:
<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[])::TEXT$$
   ) AS ct ("neighborhood" TEXT, "0" INT, "1" INT, "2" INT, "3" INT);</code>
登入後複製

解釋:

  • 第一個查詢計算每個街區每個臥室數量的平均價格。
  • crosstab()函數將第一個查詢的結果作為輸入,並建立透視表。傳遞給crosstab()函數的字串指定要放在標題中的列值。
  • ::INT強制轉換用於將AVG()結果轉換為整數,以便在輸出中獲得四捨五入的值。

附加說明:

  • 必須安裝tablefunc模組才能使用crosstab()函數。
  • 您也可以將FILTER子句與聚合函數一起使用來建立透視表,但它通常比crosstab()函數慢。
  • PostgreSQL中有多種其他方法和擴充功能可用於建立透視表。請參閱文件以找到最適合您特定需求的解決方案。

以上是如何使用 crosstab() 函數在 PostgreSQL 中建立資料透視表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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