Maison >base de données >tutoriel mysql >Comment transposer les trois e-mails des utilisateurs les plus récents en colonnes dans PostgreSQL ?

Comment transposer les trois e-mails des utilisateurs les plus récents en colonnes dans PostgreSQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 16:48:421001parcourir

How to Transpose the Three Most Recent User Emails into Columns in PostgreSQL?

Utiliser crosstab() pour faire pivoter les e-mails des utilisateurs récents dans PostgreSQL

Défi : Vous devez transformer un tableau contenant les e-mails de plusieurs utilisateurs dans un format dans lequel les trois e-mails les plus récents de chaque utilisateur sont affichés dans des colonnes distinctes.

Solution : La fonction crosstab() de PostgreSQL (de l'extension tablefunc) fournit une solution efficace. Cette approche implique ces étapes clés :

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

Répartition :

  1. Sous-requête : Une sous-requête classe les e-mails de chaque utilisateur en fonction de creation_date en utilisant ROW_NUMBER(). NULLS LAST garantit que les dates de création NULL sont traitées de manière appropriée.

  2. Filtrage : La clause WHERE rn < 4 restreint les résultats aux trois e-mails les plus récents par utilisateur.

  3. crosstab() Fonction : La fonction crosstab() fait pivoter les données d'e-mail classées. Le paramètre VALUES (1),(2),(3) définit les trois colonnes de sortie (email1, email2, email3).

  4. Sortie : La requête finale renvoie un tableau avec user_id, user_name et les trois adresses e-mail les plus récentes dans des colonnes séparées.

Cette méthode gère efficacement la transposition, offrant une solution claire et concise pour extraire les données de courrier électronique les plus récentes. N'oubliez pas d'activer l'extension tablefunc si elle n'est pas déjà activée dans votre base de données PostgreSQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn