sql >> Base de Datos >  >> RDS >> Mysql

MySQL GROUP BY con preferencia

Podría usar una función agregada para obtener el registro más "relevante" para cada correo electrónico.
Creo que esta consulta le daría el mejor resultado:

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

Devolverá la fila más rica para cada dirección de correo electrónico, pero todos los datos se devolverán dentro de una cadena (separados por comas), por lo que tendrá que analizarlos de alguna manera.
Si el rendimiento no es un problema y desea obtener un conjunto de resultados normal en campos separados, puede optar por uno:

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