使用PostgreSQL和crosstab()函數建立透視表
資料分析經常涉及探索不同變數之間的關係。透視表是一種強大的工具,可以對資料進行匯總和呈現,從而輕鬆識別趨勢和模式。本文示範如何使用PostgreSQL建立透視表。
問題:
假設您在PostgreSQL中有一個名為listings
的表,包含以下列:
id
neighborhood
(街區)bedrooms
(臥室數量)price
(價格)您需要建立一個交叉表查詢,顯示每個街區的平均價格,其中臥室數量作為列,街區作為行。輸出應採用以下格式:
街区 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
市中心 | 189000 | 325000 | - | 450000 |
河景 | 250000 | 300000 | 350000 | - |
解:
要在PostgreSQL中建立透視表,您可以結合使用AVG()
聚合函數和tablefunc
模組提供的crosstab()
函數。以下是逐步指南:
<code class="language-sql">SELECT neighborhood, bedrooms, AVG(price) FROM listings GROUP BY 1, 2 ORDER BY 1, 2;</code>
<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()
函數慢。 以上是如何使用 crosstab() 函數在 PostgreSQL 中建立資料透視表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!