Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL GROUP BY mit Präferenz

Sie könnten eine Aggregatfunktion verwenden, um den „relevanteren“ Datensatz für jede E-Mail zu erhalten.
Ich denke, diese Abfrage würde Ihnen das beste Ergebnis liefern:

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

Es wird die reichhaltigste Zeile für jede E-Mail-Adresse zurückgegeben, aber alle Daten werden innerhalb einer Zeichenfolge (durch Kommas getrennt) zurückgegeben, sodass Sie sie irgendwie analysieren müssen.
Wenn die Leistung kein Problem darstellt und Sie eine normale Ergebnismenge in separaten Feldern erhalten möchten, können Sie sich für eines entscheiden:

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