首頁 >資料庫 >mysql教程 >如何將最近的三個使用者電子郵件轉置到 PostgreSQL 中的欄位中?

如何將最近的三個使用者電子郵件轉置到 PostgreSQL 中的欄位中?

Barbara Streisand
Barbara Streisand原創
2025-01-10 16:48:42959瀏覽

How to Transpose the Three Most Recent User Emails into Columns in PostgreSQL?

使用 crosstab() 在 PostgreSQL 中透視最近的使用者電子郵件

挑戰:您需要將包含多個使用者電子郵件的表格轉換為一種格式,其中每個使用者的最近三封電子郵件顯示為單獨的欄位。

解決方案: PostgreSQL 的 crosstab() 函數(來自 tablefunc 擴充)提供了一個有效的解決方案。 這種方法涉及以下關鍵步驟:

<code class="language-sql">SELECT * FROM crosstab(
   $$SELECT user_id, user_name, rn, email_address
     FROM  (
        SELECT u.user_id, u.user_name, e.email_address
             , row_number() OVER (PARTITION BY u.user_id
                            ORDER BY e.creation_date DESC NULLS LAST) AS rn
        FROM   usr u
        LEFT   JOIN email_tbl e USING (user_id)
        ) sub
     WHERE  rn < 4
     ORDER  BY user_id
   $$
  , 'VALUES (1),(2),(3)'
   ) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);</code>

細分:

  1. 子查詢: 子查詢使用 creation_date 基於 ROW_NUMBER() 對每個使用者的電子郵件進行排名。 NULLS LAST 確保正確處理 NULL 建立日期。

  2. 過濾: WHERE rn < 4 子句將結果限制為每個使用者最近的三封電子郵件。

  3. crosstab() 函數: crosstab() 函數對排名的電子郵件資料進行透視。 VALUES (1),(2),(3) 參數定義三個輸出欄位(email1email2email3)。

  4. 輸出: 最終查詢傳回一個表,其中包含 user_iduser_name 和三個最近的電子郵件地址作為單獨的列。

該方法有效地處理了轉置,為提取最新的電子郵件資料提供了清晰簡潔的解決方案。如果您的 PostgreSQL 資料庫中尚未啟用 tablefunc 擴展,請記住啟用它。

以上是如何將最近的三個使用者電子郵件轉置到 PostgreSQL 中的欄位中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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