Home >Database >Mysql Tutorial >How Can I Efficiently Extract Unique Email Addresses from a Database While Retaining Other Column Data?
DISTINCT Query Optimization for Unique Email Extraction
When querying a database to retrieve data from multiple columns, the DISTINCT clause is commonly used to eliminate duplicate rows and ensure uniqueness. However, in certain scenarios, it may be necessary to apply DISTINCT to only a specific column, such as email addresses.
Consider the following query:
SELECT ID, Email, ProductName, ProductModel FROM Products;
If you need to modify this query to return only distinct email addresses, allowing duplicates in other columns, the traditional DISTINCT clause may not suffice. Instead, you can employ a technique called "row numbering within partitions."
Query Optimization Using Window Functions
To achieve the desired result, we can utilize window functions within a subquery. In SQL Server 2005 or above, the following query can be used:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products ) a WHERE rn = 1;
This query first creates a derived table using a window function to assign each row within each email partition a unique row number (rn), starting from the last row. The outermost query then filters the derived table to include only rows with an rn value of 1, ensuring the inclusion of only one row per unique email address.
Example with Filtering
Additionally, you can incorporate filtering criteria into the subquery to further refine the results. For instance, the following modified query restricts the results to products with a specific model and name containing a certain string:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products WHERE ProductModel = 2 AND ProductName LIKE 'CYBER%' ) a WHERE rn = 1;
By utilizing window functions and row numbering within partitions, you can effectively eliminate duplicate email addresses while preserving uniqueness in other columns, allowing for efficient and flexible data retrieval.
The above is the detailed content of How Can I Efficiently Extract Unique Email Addresses from a Database While Retaining Other Column Data?. For more information, please follow other related articles on the PHP Chinese website!