Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL GROUP BY avec préférence

Vous pouvez utiliser une fonction d'agrégation pour obtenir l'enregistrement le plus "pertinent" pour chaque e-mail.
Je pense que cette requête vous permettrait d'obtenir le meilleur résultat :

SELECT emailAddress, max(concat(fullName,',',address1,',',address2))
FROM table
GROUP BY emailAddress

Il renverra la ligne la plus riche pour chaque adresse e-mail, mais toutes les données seront renvoyées dans une chaîne (séparées par des virgules), vous devrez donc l'analyser d'une manière ou d'une autre.
Si les performances ne posent aucun problème et que vous souhaitez obtenir un ensemble de résultats normaux dans des champs séparés, vous pouvez en choisir un :

SELECT table.emailAddress, fullName, address1, address2 
FROM 
table JOIN 
    (SELECT emailAddress, 
       max(concat(fullName,address1,address2)) as bestRowInOneString
    FROM table
    GROUP BY emailAddress
    ) bestRowsSubQuery 
 ON 
   concat(table.fullname,table.address1,table.address2) = bestRowsSubQuery.bestRowInOneString
   AND table.emailAddress = bestRowsSubQuery.emailAddress