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 ?

Comment transposer les dernières adresses e-mail en colonnes pour les requêtes des utilisateurs à l'aide de SQL ?

DDD
DDDoriginal
2025-01-10 16:16:42224parcourir

How to Transpose Latest Email Addresses into Columns for User Queries Using 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.

La fonction

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.

Le résultat de la requête

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!

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