Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL GROUP BY com preferência


Você pode usar uma função agregada para obter o registro mais 'relevante' para cada e-mail.
Acho que esta consulta lhe daria o melhor resultado:
SELECT emailAddress, max(concat(fullName,',',address1,',',address2))
FROM table
GROUP BY emailAddress

Ele retornará a linha mais rica para cada endereço de e-mail, mas todos os dados serão retornados em uma string (separada por vírgula), então você terá que analisá-la de alguma forma.
Se o desempenho não for problema e você quiser obter um resultado normal definido em campos separados, poderá usar um:
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