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