ホームページ > データベース > mysql チュートリアル > ユーザーの電子メール アドレスを最新の 3 つだけを表示する列に転置するにはどうすればよいですか?

ユーザーの電子メール アドレスを最新の 3 つだけを表示する列に転置するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-10 15:41:45
オリジナル
801 人が閲覧しました

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

最新のレコードを表示するには、ユーザーの電子メール アドレスを列に置き換えます

各ユーザーの複数の電子メール アドレスをリストしたテーブルがあるとします。目標は、これらの電子メールを、作成日に基づいて「最新」の 3 つのアドレスを表示する列に置き換えることです。これにより、次のような出力テーブルが生成されます:

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() 関数に基づいて結果を最新の 3 つの電子メール アドレスに制限します。 crosstab() 関数はこれらの電子メールを列に転置し、欠損値が NULL として表現されるようにします。

以上がユーザーの電子メール アドレスを最新の 3 つだけを表示する列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート