Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đếm bản ghi từ hai bảng được nhóm theo một trường

Có vẻ như bạn đang cố gắng làm điều này:

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

chỉnh sửa:

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

xem SQL Fiddle với bản trình diễn

chỉnh sửa # 2, nếu bạn muốn trả lại dữ liệu cho những ngày bị thiếu, thì tôi khuyên bạn nên tạo một bảng để chứa ngày lịch, sau đó bạn có thể trả lại dữ liệu cho những ngày bị thiếu. Phần sau sẽ trả về những gì bạn đang tìm kiếm. Xin lưu ý, tôi đã tạo một bảng lịch cho truy vấn này:

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

xem SQL Fiddle with Demo

Nếu bạn không quan tâm đến các ngày khác, thì đây là cách bạn sẽ làm điều đó mà không có date bảng:

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

xem SQL Fiddle với Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cải thiện việc băm mật khẩu với một muối ngẫu nhiên

  2. PHP tạo chèn PDO động

  3. MySQL - Cách chọn Tối thiểu và Tối đa trong một Truy vấn (UNION)

  4. MySql 5.6 tương đương với `MySQLInstanceConfig.exe` để chỉnh sửa tệp cấu hình ở đâu?

  5. Rails 3, thay đổi trường trong mô hình từ loại chuỗi sang loại ngày giờ