sql >> Database >  >> RDS >> Mysql

MYSQL Left Join COUNTS van meerdere tabellen

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

Of u kunt de aggregatie in subquery's uitvoeren, wat waarschijnlijk efficiënter zal zijn als u een aanzienlijke hoeveelheid gegevens in de tabellen heeft:

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. Prestaties van LIKE-query's op miljoenen rijtabellen, MySQL

  2. bestellen op newid() - hoe werkt het?

  3. Een uitzondering krijgen ORA-00942:tabel of weergave bestaat niet - bij invoegen in een bestaande tabel

  4. Hoe rijen met null-waarden te filteren in Select-instructie in SQL Server - SQL Server / TSQL-zelfstudie, deel 110