sql >> Databáze >  >> RDS >> Mysql

MySQL GROUP BY s preferencí

Můžete použít agregační funkci pro získání „relevantnějšího“ záznamu pro každý e-mail.
Myslím, že tento dotaz by vám přinesl nejlepší výsledek:

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

Vrátí nejbohatší řádek pro každou e-mailovou adresu, ale všechna data budou vrácena v rámci jednoho řetězce (odděleného čárkou), takže je budete muset nějak analyzovat.
Pokud výkon není žádný problém a chcete získat normální sadu výsledků v samostatných polích, můžete použít jeden:

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


  1. úlohy cronu nebo plánovač PHP

  2. Použití sekvence PostgreSQL v režimu spánku neovlivňuje tabulku sekvencí

  3. Dotaz MySQL pro získání názvů sloupců?

  4. MySQL Vybrat DISTINCT více sloupců na základě jedinečnosti jednoho řádku?