Maison >base de données >tutoriel mysql >Comment transposer les trois e-mails des utilisateurs les plus récents en colonnes dans 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 :
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.
Filtrage : La clause WHERE rn < 4
restreint les résultats aux trois e-mails les plus récents par utilisateur.
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
).
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!