Heim >Datenbank >MySQL-Tutorial >Wie transponiere ich die drei aktuellsten Benutzer-E-Mails in Spalten in PostgreSQL?
Verwenden von crosstab()
zum Pivotieren aktueller Benutzer-E-Mails in PostgreSQL
Herausforderung: Sie müssen eine Tabelle mit mehreren Benutzer-E-Mails in ein Format umwandeln, in dem die drei neuesten E-Mails für jeden Benutzer als separate Spalten angezeigt werden.
Lösung: Die crosstab()
-Funktion von PostgreSQL (aus der tablefunc
-Erweiterung) bietet eine effiziente Lösung. Dieser Ansatz umfasst die folgenden wichtigen Schritte:
<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>
Aufschlüsselung:
Unterabfrage: Eine Unterabfrage ordnet E-Mails für jeden Benutzer basierend auf creation_date
unter Verwendung von ROW_NUMBER()
. NULLS LAST
stellt sicher, dass NULL-Erstellungsdaten ordnungsgemäß behandelt werden.
Filterung: Die WHERE rn < 4
-Klausel beschränkt die Ergebnisse auf die drei neuesten E-Mails pro Benutzer.
crosstab()
Funktion: Die Funktion crosstab()
dreht die geordneten E-Mail-Daten. Der Parameter VALUES (1),(2),(3)
definiert die drei Ausgabespalten (email1
, email2
, email3
).
Ausgabe: Die letzte Abfrage gibt eine Tabelle mit user_id
, user_name
und den drei aktuellsten E-Mail-Adressen als separate Spalten zurück.
Diese Methode erledigt die Umsetzung effizient und bietet eine klare und präzise Lösung zum Extrahieren der neuesten E-Mail-Daten. Denken Sie daran, die Erweiterung tablefunc
zu aktivieren, falls sie nicht bereits in Ihrer PostgreSQL-Datenbank aktiviert ist.
Das obige ist der detaillierte Inhalt vonWie transponiere ich die drei aktuellsten Benutzer-E-Mails in Spalten in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!