Transpose latest email address into column for user query
In database management, it is often necessary to convert data from its initial form into a format that facilitates efficient analysis and retrieval. One of these transformations involves transposing rows of multiple email addresses associated with a user into columns. This allows extracting the latest available email address for each user based on specific criteria (such as creation date).
To achieve this conversion, you can use the tablefunc
function in the crosstab()
module. The following SQL query demonstrates how to use crosstab()
to transpose the last three email addresses of each user:
<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>
In this query, the subquery calculates the row number for each email address, separated by user_id
, and sorted in descending order based on creation_date
. The NULLS LAST
clause ensures that null values are treated as the lowest ranked value. The generated rn
line numbers are then used to limit each user's selection to the first three email addresses.
crosstab()
function takes two parameters: the query string (defining the data source) and the key value to be used as the column transpose. In this example, the query string retrieves relevant data from the usr
and email_tbl
tables, and the second parameter specifies the value (1),(2),(3)
, corresponding to the three columns email1
, email2
, and email3
.
query is a table containing user_id
, user_name
, and the three most recent email
addresses for each user, transposed into separate columns. This transformation simplifies the retrieval of each user's latest available email address, allowing for efficient data analysis and communication.
The above is the detailed content of How to Transpose Latest Email Addresses into Columns for User Queries Using SQL?. For more information, please follow other related articles on the PHP Chinese website!