sql >> Databasteknik >  >> RDS >> Mysql

MYSQL Left Gå med COUNTS från flera 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 så kan du utföra aggregeringen i underfrågor, vilket sannolikt kommer att vara mer effektivt om du har en betydande mängd data i tabellerna:

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. MySQL – Få senaste frågekostnad genom att använda VISA STATUS SOM "Last_Query_Cost"

  2. MySQL:Inner join vs Where

  3. Kör PostgreSQL endast i minnet

  4. Beräkna öppettider mellan två datum