行データを列に変換: ユーザーの最新の電子メール アドレスを表示します
質問:
テーブルにはユーザーごとに複数の電子メール アドレスがあり、作成日に基づいて各ユーザーの最新の 3 つの電子メール アドレスが表示されるように列に平坦化したいと考えています。
期待される出力:
user_name | user_id | email1 | email2 | email3 |
---|---|---|---|---|
Mary | 123 | [email protected] | [email protected] | [email protected] |
Joe | 345 | [email protected] | NULL | NULL |
解決策:
これを行うには、PostgreSQL の 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 ORDER BY user_id, rn $$, 'VALUES (1),(2),(3)' ) AS ct (user_id integer, user_name text, email1 text, email2 text, email3 text);</code>
説明:
注:
以上がユーザーメールの行データをPostgreSQLの列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。