Maison >base de données >tutoriel mysql >Comment transposer les adresses e-mail des utilisateurs en colonnes affichant uniquement les trois plus récentes ?

Comment transposer les adresses e-mail des utilisateurs en colonnes affichant uniquement les trois plus récentes ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-10 15:41:45803parcourir

How to Transpose User Email Addresses into Columns Showing Only the Three Newest?

Transposez les adresses e-mail des utilisateurs en colonnes pour afficher les derniers enregistrements

Supposons que vous ayez un tableau répertoriant plusieurs adresses e-mail pour chaque utilisateur. Le but est de transposer ces emails en colonnes qui affichent les trois adresses « les plus récentes » en fonction de leur date de création. Cela produira un tableau de sortie qui ressemble à ceci :

user_name user_id email1 email2 email3
Mary 123 [email protected] [email protected] [email protected]
Joe 345 [email protected] (NULL) (NULL)

Pour réaliser cette transposition, on peut utiliser la fonction crosstab() dans le module tablefunc :

<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
   $$,
   $$SELECT generate_series(1,3)$$
) AS ct (user_id int, user_name text, email1 text, email2 text, email3 text);</code>
L'instruction

externe SELECT extrait les données spécifiques à l'utilisateur, limitant les résultats aux trois adresses e-mail les plus récentes en fonction de la fonction row_number(). La fonction crosstab() transpose ensuite ces emails en colonnes, garantissant que les valeurs manquantes sont représentées comme NULL.

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