sql >> Database teknologi >  >> RDS >> Mysql

MYSQL venstre Deltag COUNTS fra flere tabeller

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

Eller du kan udføre aggregeringen i underforespørgsler, hvilket sandsynligvis vil være mere effektivt, hvis du har en betydelig mængde data i tabellerne:

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. PHP MYSQL Blog Archive Menu efter år og måned

  2. Sequelize:Eller-tilstand over flere borde

  3. 3 måder at finde rækker, der indeholder store bogstaver i MySQL

  4. Ændre dette fra MySQL til MySQLi?