
Pindahkan alamat e-mel pengguna ke dalam lajur untuk menunjukkan rekod terkini
Andaikan anda mempunyai jadual yang menyenaraikan berbilang alamat e-mel untuk setiap pengguna. Matlamatnya adalah untuk menukar e-mel ini ke dalam lajur yang menunjukkan tiga alamat "terbaru" berdasarkan tarikh pembuatannya. Ini akan menghasilkan jadual output yang kelihatan seperti ini:
| user_name | user_id | email1 | email2 | email3 |
|---|---|---|---|---|
| Mary | 123 | [email protected] | [email protected] | [email protected] |
| Joe | 345 | [email protected] | (NULL) | (NULL) |
Untuk mencapai transposisi ini, kita boleh menggunakan fungsi tab silang() dalam modul 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 <= 3
$$,
$$SELECT generate_series(1,3)$$
) AS ct (user_id int, user_name text, email1 text, email2 text, email3 text);</code> luaran SELECT mengekstrak data khusus pengguna, mengehadkan keputusan kepada tiga alamat e-mel terbaharu berdasarkan fungsi row_number(). Fungsi crosstab() kemudian menukar e-mel ini ke dalam lajur, memastikan nilai yang hilang diwakili sebagai NULL.
Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Alamat E-mel Pengguna ke Lajur Hanya Menunjukkan Tiga Yang Terbaru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Bagaimana untuk melihat prosedur tersimpan dalam MySQL
Apakah maksud pembubaran?
Beberapa cara untuk menangkap data
Bagaimana untuk membuka fail bak
Pengenalan kepada atribut tag artikel
Sepuluh kedudukan pertukaran mata wang digital teratas
Bagaimana untuk menyelesaikan masalah pelayan dns tidak bertindak balas
Bagaimana untuk memusatkan div dalam css