最新の電子メール アドレスをユーザー クエリの列に転置します
データベース管理では、多くの場合、データを初期形式から効率的な分析と検索を容易にする形式に変換する必要があります。これらの変換の 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 サイトの他の関連記事を参照してください。