sql >> データベース >  >> RDS >> Mysql

1つのフィールドでグループ化された2つのテーブルからレコードをカウントします

    これを行おうとしているようですね:

    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

    編集:

    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

    SQL Fiddle withdemo を参照してください。

    編集#2、欠落している日のデータを返したい場合は、カレンダーの日付を含むテーブルを作成することをお勧めします。そうすれば、欠落している日のデータを返すことができます。以下はあなたが探しているものを返すはずです。このクエリ用にカレンダーテーブルを作成しました:

    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
    

    SQL Fiddle withDemo を参照してください。

    他の日付を気にしない場合は、これがdateなしで行う方法です。 テーブル:

    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
    

    SQL Fiddle withDemo を参照してください。



    1. SQL IDシーケンスが同期しなくなるのはなぜですか(特にPostgresを使用)?

    2. MySQLステートメントの正確な実行時間を取得する

    3. MySQLgroup_concatとwhere句

    4. PHPスクリプトはデータベースに接続しませんか?