Maison >base de données >tutoriel mysql >Comment transposer les dernières adresses e-mail en colonnes pour les requêtes des utilisateurs à l'aide de SQL ?
Transposer la dernière adresse e-mail en colonne pour la requête de l'utilisateur
Dans la gestion de bases de données, il est souvent nécessaire de convertir les données de leur forme initiale dans un format facilitant une analyse et une récupération efficaces. L'une de ces transformations consiste à transposer les lignes de plusieurs adresses email associées à un utilisateur en colonnes. Cela permet d'extraire la dernière adresse email disponible pour chaque utilisateur en fonction de critères spécifiques (tels que la date de création).
Pour réaliser cette conversion, vous pouvez utiliser la fonction tablefunc
dans le module crosstab()
. La requête SQL suivante montre comment utiliser crosstab()
pour transposer les trois dernières adresses e-mail de chaque utilisateur :
<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>
Dans cette requête, la sous-requête calcule le numéro de ligne de chaque adresse e-mail, séparé par user_id
et trié par ordre décroissant en fonction de creation_date
. La clause NULLS LAST
garantit que les valeurs nulles sont traitées comme la valeur la moins bien classée. Les numéros de ligne rn
générés sont ensuite utilisés pour limiter la sélection de chaque utilisateur aux trois premières adresses e-mail.
crosstab()
prend deux paramètres : la chaîne de requête (définissant la source de données) et la valeur clé à utiliser comme transposition de colonne. Dans cet exemple, la chaîne de requête récupère les données pertinentes des tables usr
et email_tbl
, et le deuxième paramètre spécifie la valeur (1),(2),(3)
, correspondant aux trois colonnes email1
, email2
et email3
.
est un tableau contenant user_id
, user_name
et les trois adresses email
les plus récentes pour chaque utilisateur, transposées dans des colonnes distinctes. Cette transformation simplifie la récupération de la dernière adresse e-mail disponible de chaque utilisateur, permettant une analyse et une communication efficaces des données.
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!