Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL GROUP BY z preferencjami

Możesz użyć funkcji agregującej, aby uzyskać bardziej „odpowiedni” rekord dla każdego e-maila.
Myślę, że to zapytanie przyniesie najlepszy wynik:

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

Zwróci najbogatszy wiersz dla każdego adresu e-mail, ale wszystkie dane zostaną zwrócone w jednym ciągu (oddzielonym przecinkami), więc będziesz musiał je jakoś przeanalizować.
Jeśli wydajność nie stanowi problemu i chcesz uzyskać normalny zestaw wyników w oddzielnych polach, możesz wybrać 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL, które zwraca wszystkie daty nieużywane w tabeli

  2. Ograniczenie klucza obcego nie działa

  3. Parametry GET podatne na wstrzyknięcie SQL - PHP

  4. Jaka jest różnica między usuwaniem z table_a a obcinaniem tabeli table_a w MySQL?

  5. SQL wybierz n-tego członka grupy