Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL Left Join COUNTS от множество таблици

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

Или можете да извършите агрегирането в подзаявки, което вероятно ще бъде по-ефективно, ако имате значително количество данни в таблиците:

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 в Ubuntu и напълно управляван

  2. Предупреждение:mysql_fetch_array() очаква параметър 1 да бъде ресурс, булев, даден в

  3. Codeigniter simple_query срещу конструктор на заявки (вмъкване, актуализиране и изтриване)

  4. Получаване на връзката неуспешно:php_network_getaddresses:getaddrinfo неуспешно:Име или услуга не са известни

  5. Как да прехвърлите всички MySQL бази данни от стар към нов сървър