Heim >Datenbank >MySQL-Tutorial >Wie transponiere ich die drei aktuellsten Benutzer-E-Mails in Spalten in PostgreSQL?

Wie transponiere ich die drei aktuellsten Benutzer-E-Mails in Spalten in PostgreSQL?

Barbara Streisand
Barbara StreisandOriginal
2025-01-10 16:48:42959Durchsuche

How to Transpose the Three Most Recent User Emails into Columns 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:

  1. 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.

  2. Filterung: Die WHERE rn < 4-Klausel beschränkt die Ergebnisse auf die drei neuesten E-Mails pro Benutzer.

  3. crosstab()Funktion: Die Funktion crosstab() dreht die geordneten E-Mail-Daten. Der Parameter VALUES (1),(2),(3) definiert die drei Ausgabespalten (email1, email2, email3).

  4. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn