Transponieren Sie Benutzer-E-Mail-Adressen in Spalten, um die neuesten Datensätze anzuzeigen
Angenommen, Sie haben eine Tabelle mit mehreren E-Mail-Adressen für jeden Benutzer. Das Ziel besteht darin, diese E-Mails in Spalten umzuwandeln, die die „aktuellsten“ drei Adressen basierend auf ihrem Erstellungsdatum anzeigen. Dadurch wird eine Ausgabetabelle erstellt, die wie folgt aussieht:
user_name | user_id | email1 | email2 | email3 |
---|---|---|---|---|
Mary | 123 | [email protected] | [email protected] | [email protected] |
Joe | 345 | [email protected] | (NULL) | (NULL) |
Um diese Transposition zu erreichen, können wir die Funktion crosstab() im Tablefunc-Modul verwenden:
<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>
externe SELECT
-Anweisung extrahiert benutzerspezifische Daten und beschränkt die Ergebnisse basierend auf der row_number()
-Funktion auf die drei aktuellsten E-Mail-Adressen. Die Funktion crosstab()
transponiert diese E-Mails dann in Spalten und stellt so sicher, dass fehlende Werte als NULL dargestellt werden.
Das obige ist der detaillierte Inhalt vonWie transponiere ich Benutzer-E-Mail-Adressen in Spalten, in denen nur die drei neuesten angezeigt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!