Heim >Datenbank >MySQL-Tutorial >Wie transponiere ich die neuesten E-Mail-Adressen mithilfe von SQL in Spalten für Benutzerabfragen?

Wie transponiere ich die neuesten E-Mail-Adressen mithilfe von SQL in Spalten für Benutzerabfragen?

DDD
DDDOriginal
2025-01-10 16:16:42223Durchsuche

How to Transpose Latest Email Addresses into Columns for User Queries Using SQL?

Neueste E-Mail-Adresse in Spalte für Benutzerabfrage übertragen

Bei der Datenbankverwaltung ist es häufig erforderlich, Daten aus ihrer ursprünglichen Form in ein Format zu konvertieren, das eine effiziente Analyse und einen effizienten Abruf ermöglicht. Eine dieser Transformationen besteht darin, Zeilen mit mehreren E-Mail-Adressen, die einem Benutzer zugeordnet sind, in Spalten umzuwandeln. Dies ermöglicht das Extrahieren der neuesten verfügbaren E-Mail-Adresse für jeden Benutzer basierend auf bestimmten Kriterien (z. B. Erstellungsdatum).

Um diese Konvertierung zu erreichen, können Sie die Funktion tablefunc im Modul crosstab() verwenden. Die folgende SQL-Abfrage zeigt, wie crosstab() verwendet wird, um die letzten drei E-Mail-Adressen jedes Benutzers zu transponieren:

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

In dieser Abfrage berechnet die Unterabfrage die Zeilennummer für jede E-Mail-Adresse, getrennt durch user_id und sortiert in absteigender Reihenfolge basierend auf creation_date. Die NULLS LAST-Klausel stellt sicher, dass Nullwerte als Wert mit dem niedrigsten Rang behandelt werden. Die generierten rn-Zeilennummern werden dann verwendet, um die Auswahl jedes Benutzers auf die ersten drei E-Mail-Adressen zu beschränken.

Die Funktion

crosstab() benötigt zwei Parameter: die Abfragezeichenfolge (die die Datenquelle definiert) und den Schlüsselwert, der als Spaltentransponierung verwendet werden soll. In diesem Beispiel ruft die Abfragezeichenfolge relevante Daten aus den Tabellen usr und email_tbl ab, und der zweite Parameter gibt den Wert (1),(2),(3) an, der den drei Spalten email1, email2 und email3 entspricht.

Die Ausgabe der

-Abfrage ist eine Tabelle mit user_id, user_name und den drei aktuellsten email-Adressen für jeden Benutzer, transponiert in separate Spalten. Diese Transformation vereinfacht den Abruf der neuesten verfügbaren E-Mail-Adresse jedes Benutzers und ermöglicht so eine effiziente Datenanalyse und Kommunikation.

Das obige ist der detaillierte Inhalt vonWie transponiere ich die neuesten E-Mail-Adressen mithilfe von SQL in Spalten für Benutzerabfragen?. 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