首頁 > 資料庫 > mysql教程 > 如何使用TableFunc擴展名在PostgreSQL中創建Crosstab查詢?

如何使用TableFunc擴展名在PostgreSQL中創建Crosstab查詢?

Mary-Kate Olsen
發布: 2025-01-25 11:02:08
原創
747 人瀏覽過

PostgreSQL 跨表查詢詳解:使用tablefunc擴展創建透視表

How to Create Crosstab Queries in PostgreSQL Using the tablefunc Extension?

本文將詳細介紹如何在PostgreSQL中使用tablefunc擴展創建跨表查詢(Crosstab Queries),實現數據的透視表轉換。

創建跨表查詢

跨表查詢能夠將數據轉換為表格格式,其中行代表類別,列代表值。 PostgreSQL 通過tablefunc擴展實現此功能。

雙參數跨表查詢語法:

<code class="language-sql">SELECT *
FROM crosstab(
  'SELECT row_name, category, value
   FROM base_table
   ORDER BY 1, 2',
  'SELECT DISTINCT attribute FROM base_table ORDER BY 1',
) AS ct (row_name text, column_1 type_1, ..., column_n type_n);</code>
登入後複製

處理缺失屬性:

如果基礎表中存在缺失屬性,可以使用第二個參數指定跨表中要包含哪些屬性。缺失屬性的值將為空。

處理多餘輸入行:

  • 單參數形式: 多餘行將被丟棄,較早的行優先。
  • 雙參數形式: 較晚的行將覆蓋同一類別和屬性組合的現有值。

高級跨表查詢:

  • 多列透視: 在第一個參數查詢中使用多個ORDER BY子句。
  • 動態透視替代方案: 使用CASEGROUP BY語句。

在psql中使用 crosstabview (PostgreSQL 9.6及以上版本):

在psql中使用crosstabview元命令執行跨表查詢:

<code class="language-sql">\crosstabview</code>
登入後複製

示例查詢:

考慮以下示例表:

<code class="language-sql">Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5</code>
登入後複製

要創建一個以Section為行,Status為列的跨表:

<code class="language-sql">SELECT *
FROM crosstab(
  'SELECT section, status, COUNT(*) FROM tbl GROUP BY 1, 2',
  'SELECT DISTINCT status FROM tbl ORDER BY 1',
) AS ct (Section text, Active int, Inactive int);</code>
登入後複製

結果:

<code>Section    Active    Inactive
A          1         2
B          4         5</code>
登入後複製

以上是如何使用TableFunc擴展名在PostgreSQL中創建Crosstab查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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