Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL GROUP BY con preferenza

È possibile utilizzare una funzione di aggregazione per ottenere il record più "rilevante" per ciascuna e-mail.
Penso che questa query ti darebbe il miglior risultato:

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

Restituirà la riga più ricca per ogni indirizzo e-mail, ma tutti i dati verranno restituiti all'interno di una stringa (separati da virgole), quindi dovrai analizzarli in qualche modo.
Se le prestazioni non sono un problema e desideri ottenere un set di risultati normale in campi separati, puoi sceglierne 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