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

Počítejte záznamy ze dvou tabulek seskupených podle jednoho pole

Zdá se, že se o to pokoušíte:

select d.RepName, count(d.RepName) DoctorReportsCount, count(h.RepName) HospitalsReportsCount, d.DateAdded from doctorreports d inner join hospitals h on d.RepName = h.RepName group by d.RepName, d.DateAdded

upravit:

select * from ( select d.RepName, count(d.RepName) DoctorReportsCount , d.dateadded from doctorreports d group by d.RepName, d.dateadded ) d left join ( select h.RepName, count(h.RepName) HospitalsReportsCount , h.dateadded hDateadded from hospitals h group by h.RepName, h.dateadded )h on d.RepName = h.RepName

viz SQL Fiddle s ukázkou

edit #2, pokud chcete vrátit data pro dny, které chybí, pak bych doporučil vytvořit tabulku obsahující kalendářní data, pak můžete vrátit data pro dny, které chybí. Následující by vám mělo vrátit to, co hledáte. Pro tento dotaz jsem vytvořil kalendářní tabulku:

select COALESCE(d.drep, '') repname,
  COALESCE(d.DCount, 0) DoctorReportsCount,
  COALESCE(h.HCount, 0) HospitalsReportsCount,
  c.dt Dateadded
from calendar c
left join
(
  select repname drep,
    count(repname) DCount,
    dateadded ddate
  from doctorreports
  group by repname, dateadded
) d
  on c.dt = d.ddate
left join
(
  select repname hrep,
    count(repname) HCount,
    dateadded hdate
  from hospitals
  group by repname, dateadded
) h
  on c.dt = h.hdate
  and d.drep = h.hrep

viz SQL Fiddle s ukázkou

Pokud vás ostatní data nezajímají, takto byste to udělali bez date tabulka:

select COALESCE(d.RepName, '') repname,
  COALESCE(d.DoctorReportsCount, 0) DoctorReportsCount,
  COALESCE(h.HospitalsReportsCount, 0) HospitalsReportsCount,
  COALESCE(p.PharmacyReportsCount, 0) PharmacyReportsCount,
  d.dateadded Dateadded
from
(
  select d.RepName,
      count(d.RepName) DoctorReportsCount
    , d.dateadded
  from doctorreports d
  group by d.RepName, d.dateadded
) d
left join
(
  select h.RepName,
    count(h.RepName) HospitalsReportsCount
  , h.dateadded hDateadded
  from hospitals h
  group by h.RepName, h.dateadded
)h
  on d.RepName = h.RepName
  and d.dateadded = h.hDateadded
left join
(
  select p.RepName,
    count(p.RepName) PharmacyReportsCount
  , p.dateadded hDateadded
  from PharmacyReports p
  group by p.RepName, p.dateadded
)p
  on d.RepName = p.RepName
  and d.dateadded = p.hDateadded

viz SQL Fiddle s ukázkou



  1. Problém s vybranými žánry MySQL (php)

  2. PHP:vložte více hodnot zaškrtávacích políček do jednoho sloupce MySQL

  3. jak přidat vlastní adaptér do aktivity, aby se seznam objevil v aktivitě?

  4. Jak GROUP BY DESC vybírá své pořadí?