首页 >数据库 >mysql教程 >如何将用户电子邮件地址转换为仅显示三个最新地址的列?

如何将用户电子邮件地址转换为仅显示三个最新地址的列?

Patricia Arquette
Patricia Arquette原创
2025-01-10 15:41:45801浏览

How to Transpose User Email Addresses into Columns Showing Only the Three Newest?

将用户电子邮件地址转置到列中以显示最新记录

假设有一个表格列出了每个用户的多个电子邮件地址。目标是将这些电子邮件转置到列中,根据其创建日期显示“最新”的三个地址。这将生成如下所示的输出表:

user_name user_id email1 email2 email3
Mary 123 [email protected] [email protected] [email protected]
Joe 345 [email protected] (NULL) (NULL)

为了实现这种转置,我们可以使用tablefunc模块中的crosstab()函数:

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

外部SELECT语句提取用户特定数据,根据row_number()函数将结果限制为最新的三个电子邮件地址。然后,crosstab()函数将这些电子邮件转置到列中,确保缺失值表示为NULL。

以上是如何将用户电子邮件地址转换为仅显示三个最新地址的列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn