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

MYSQL Left Join COUNTS z wielu tabel

select
  t.Topic,
  t.Title,
  count(distinct s.starID) as StarCount,
  count(distinct m.User) as UserCount,
  count(distinct m.messageID) as MessageCount
from
  Topics t
  left join Messages m ON m.Topic = t.Topic
  left join Stars_Given s ON s.Topic = t.Topic
group by
  t.Topic,
  t.Title

Sql Fiddle

Lub możesz przeprowadzić agregację w podzapytaniach, co prawdopodobnie będzie bardziej wydajne, jeśli masz znaczną ilość danych w tabelach:

select
  t.Topic,
  t.Title,
  s.StarCount,
  m.UserCount,
  m.MessageCount
from
  Topics t
  left join (
    select 
      Topic, 
      count(distinct User) as UserCount,
      count(*) as MessageCount
    from Messages
    group by Topic
  ) m ON m.Topic = t.Topic
  left join (
    select
      Topic, 
      count(*) as StarCount
    from Stars_Given 
    group by Topic
  ) s ON s.Topic = t.Topic

Sql Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql zwraca tylko jeden wiersz przy użyciu Count

  2. usuń wiersze z wielu tabel

  3. Jak znaleźć sortowanie w MySQL

  4. Związek między katalogiem, schematem, użytkownikiem i instancją bazy danych

  5. Zapis DataFrame do tabeli mysql za pomocą pySpark