
Convertir les données des lignes en colonnes : afficher la dernière adresse e-mail de l'utilisateur
Question :
Vous avez plusieurs adresses e-mail par utilisateur dans votre tableau et vous souhaitez l'aplatir en colonnes afin qu'il affiche les trois adresses e-mail les plus récentes pour chaque utilisateur en fonction de la date de création.
Résultat attendu :
| user_name | user_id | email1 | email2 | email3 |
|---|---|---|---|---|
| Mary | 123 | [email protected] | [email protected] | [email protected] |
| Joe | 345 | [email protected] | NULL | NULL |
Solution :
Pour ce faire, vous pouvez profiter de la fonction crosstab() du module tablefunc dans PostgreSQL :
<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
ORDER BY user_id, rn
$$,
'VALUES (1),(2),(3)'
) AS ct (user_id integer, user_name text, email1 text, email2 text, email3 text);</code>Explication :
Remarque :
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!
Qu'est-ce que le fichier ESD ?
Quelle est la balise article utilisée pour définir ?
Comment résoudre l'erreur d'analyse syntaxique
Comment résoudre le problème de l'écran noir après avoir allumé l'ordinateur et impossible d'accéder au bureau
Comment configurer l'espace virtuel jsp
Collection complète d'instructions de requête SQL
qu'est-ce que le CSS
qu'est-ce qu'Adobe Flash Player