
Zeilendaten in Spalten umwandeln: Zeigt die neueste E-Mail-Adresse des Benutzers an
Frage:
Sie haben mehrere E-Mail-Adressen pro Benutzer in Ihrer Tabelle und möchten sie in Spalten aufteilen, sodass die drei neuesten E-Mail-Adressen für jeden Benutzer basierend auf dem Erstellungsdatum angezeigt werden.
Erwartete Ausgabe:
| user_name | user_id | email1 | email2 | email3 |
|---|---|---|---|---|
| Mary | 123 | [email protected] | [email protected] | [email protected] |
| Joe | 345 | [email protected] | NULL | NULL |
Lösung:
Dazu können Sie die Funktion crosstab() des Moduls tablefunc in PostgreSQL nutzen:
<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>Erklärung:
Hinweis:
Das obige ist der detaillierte Inhalt vonWie transponiere ich Zeilendaten von Benutzer-E-Mails in Spalten in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Was ist eine ESD-Datei?
Was wird mit dem Artikel-Tag definiert?
So beheben Sie den Parsererror-Fehler
So lösen Sie das Problem, wenn der Computer eingeschaltet wird, der Bildschirm schwarz wird und der Desktop nicht aufgerufen werden kann
So konfigurieren Sie den virtuellen JSP-Speicherplatz
Vollständige Sammlung von SQL-Abfrageanweisungen
Was ist CSS?
Was ist Adobe Flash Player?