ホームページ > データベース > mysql チュートリアル > SQL を使用して最新の電子メール アドレスをユーザー クエリの列に転置する方法

SQL を使用して最新の電子メール アドレスをユーザー クエリの列に転置する方法

DDD
リリース: 2025-01-10 16:16:42
オリジナル
219 人が閲覧しました

How to Transpose Latest Email Addresses into Columns for User Queries Using SQL?

最新の電子メール アドレスをユーザー クエリの列に転置します

データベース管理では、多くの場合、データを初期形式から効率的な分析と検索を容易にする形式に変換する必要があります。これらの変換の 1 つは、ユーザーに関連付けられた複数の電子メール アドレスの行を列に転置することを伴います。これにより、特定の基準 (作成日など) に基づいて各ユーザーの利用可能な最新の電子メール アドレスを抽出できます。

この変換を実現するには、tablefunc モジュールの crosstab() 関数を使用できます。次の SQL クエリは、crosstab() を使用して各ユーザーの最後の 3 つの電子メール アドレスを置き換える方法を示しています。

<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>
ログイン後にコピー
このクエリでは、サブクエリは各電子メール アドレスの行番号を

で区切って計算し、user_id に基づいて降順に並べ替えます。 creation_date 句は、Null 値が最低ランクの値として扱われることを保証します。生成された NULLS LAST 行番号は、各ユーザーの選択を最初の 3 つの電子メール アドレスに制限するために使用されます。 rn

関数は、クエリ文字列 (データ ソースを定義) と列の転置として使用されるキー値の 2 つのパラメーターを取ります。この例では、クエリ文字列は crosstab() テーブルと usr テーブルから関連データを取得し、2 番目のパラメーターは 3 つの列 email_tbl(1),(2),(3)email1 に対応する値 email2 を指定します。 email3

クエリの出力は、各ユーザーの

user_id、および 3 つの最新の user_name アドレスを別の列に転置して含むテーブルです。この変換により、各ユーザーの最新の利用可能な電子メール アドレスの取得が簡素化され、効率的なデータ分析とコミュニケーションが可能になります。 email

以上がSQL を使用して最新の電子メール アドレスをユーザー クエリの列に転置する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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