sql >> Databáze >  >> RDS >> Mysql

MYSQL vlevo Připojit COUNTS z více tabulek

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

Nebo můžete provést agregaci v dílčích dotazech, což bude pravděpodobně efektivnější, pokud budete mít v tabulkách značné množství dat:

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. Jak získat záznamy mezi 2 daty v MySQL

  2. Úvod k prohlášení FORALL v databázi Oracle

  3. Použití výsledku výrazu (např. volání funkce) v seznamu parametrů uložené procedury?

  4. MariaDB přichází do města ve vašem okolí!