Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memindahkan Tiga E-mel Pengguna Terkini ke dalam Lajur dalam PostgreSQL?

Bagaimana untuk Memindahkan Tiga E-mel Pengguna Terkini ke dalam Lajur dalam PostgreSQL?

Barbara Streisand
Barbara Streisandasal
2025-01-10 16:48:421001semak imbas

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

Menggunakan crosstab() untuk Pivot E-mel Pengguna Terkini dalam PostgreSQL

Cabaran: Anda perlu menukar jadual dengan berbilang e-mel pengguna kepada format yang mana tiga e-mel terbaharu untuk setiap pengguna dipaparkan sebagai lajur berasingan.

Penyelesaian: Fungsi crosstab() PostgreSQL (daripada sambungan tablefunc) menyediakan penyelesaian yang cekap. Pendekatan ini melibatkan langkah-langkah utama berikut:

<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>

Pecahan:

  1. Subquery: Subquery menyusun e-mel untuk setiap pengguna berdasarkan creation_date menggunakan ROW_NUMBER(). NULLS LAST memastikan tarikh penciptaan NULL dikendalikan dengan sewajarnya.

  2. Penapisan: Klausa WHERE rn < 4 mengehadkan keputusan kepada tiga e-mel terbaharu bagi setiap pengguna.

  3. crosstab() Fungsi: Fungsi crosstab() memaksi data e-mel terperingkat. Parameter VALUES (1),(2),(3) mentakrifkan tiga lajur output (email1, email2, email3).

  4. Output: Pertanyaan terakhir mengembalikan jadual dengan user_id, user_name dan tiga alamat e-mel terbaharu sebagai lajur berasingan.

Kaedah ini mengendalikan transposisi dengan cekap, menyediakan penyelesaian yang jelas dan ringkas untuk mengekstrak data e-mel terbaharu. Ingat untuk mendayakan sambungan tablefunc jika ia belum didayakan dalam pangkalan data PostgreSQL anda.

Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Tiga E-mel Pengguna Terkini ke dalam Lajur dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn