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
Freigeben: 2025-01-10 16:48:42
Original
999 Leute haben es durchsucht

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage