首頁 >資料庫 >mysql教程 >如何使用「crosstab()」函數在 PostgreSQL 中建立交叉表查詢?

如何使用「crosstab()」函數在 PostgreSQL 中建立交叉表查詢?

Barbara Streisand
Barbara Streisand原創
2025-01-25 11:11:09282瀏覽

PostgreSQL 交叉表查詢:使用 crosstab() 函數建立交叉表

PostgreSQL 的交叉表查詢可以將資料轉換為更易於閱讀的表格格式,其中值按類別分組,行代表不同的屬性值。可以使用 tablefunc 模組中的 crosstab() 函數建立交叉表查詢。

改進的測試案例

考慮以下表格:

<code>Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5
C          Inactive  7</code>

我們希望建立一個交叉表查詢,回傳以下表格:

<code>Section    Active    Inactive
A          1         2
B          4         5
C          NULL         7</code>

安全形式

要建立此交叉表查詢,可以使用 crosstab() 的雙參數形式:

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT section, status, ct
    FROM   tbl
    ORDER  BY 1,2'  -- 也可以只写 "ORDER BY 1"

  , $$VALUES ('Active'::text), ('Inactive')$$
   ) AS ct ("Section" text, "Active" int, "Inactive" int);</code>

這種形式是“安全的”,因為它確保每個屬性都分配到其專用的列,即使存在多餘的輸入行。在本例中,Section C 的值填入 Inactive 列中,但 Active 列保持 NULL。

處理多餘的輸入行

crosstab() 的兩種形式對多餘的輸入行的處理方式不同。單參數形式從左到右填充可用的值列,丟棄多餘的值。雙參數形式將每個輸入值分配到其專用的列,覆蓋任何先前的分配。

進階範例

交叉表查詢可用於各種進階場景,例如:

  • 多列透視
  • 使用動態替代方案(例如 CASE 和 GROUP BY)進行透視

psql 中的 crosstabview

PostgreSQL 9.6 在其互動式終端機 psql 中引入了 crosstabview 元命令。它允許您運行交叉表查詢並以表格格式顯示結果。

<code class="language-sql">db=> SELECT section, status, ct FROM tbl \crosstabview</code>

How to Create Crosstab Queries in PostgreSQL Using the `crosstab()` Function?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn