2012-03-08 13 views
1

私はAccess 2010データベースから1日あたりの平均個数を取得しようとしていますが、何も動作していないようです。サブクエリを使用しようとしましたが、メインのサブクエリにリンクする方法を理解できません。表には、このようなすべてのオフィスの訪問のための行、があります。アクセスの1日あたりの個数の平均

patient_id, visit_year, visit_date, dow, doctor_id 
    12345, 2012, 3/5/12, Monday, 987 
    12567, 2012, 3/5/12, Monday, 986 
    12789, 2012, 3/6/12, Tuesday, 987 

私は年= 2012年、私の頭では、これは動作するはず曜日ごとに使用可能な医師の平均数を取得する必要がありますが、それはしていません:AvgDocsInOffice AS 選択ダウ、AVG(COUNT(DISTINCT(doctor_id)))訪問ダウ

BY visit_year = 2012 GROUPから私はこの出力を取得しようとしている:

DOW, AvgDocsInOffice 
    Monday, 5 
    Tuesday, 6 
    Wednesday, 4 

アイデアはありますか?残念ながら私はAccessでこれをやっている。

答えて

0
SELECT dow, AVG(CntDocsInOffice) AS AvgDocsInOffice FROM 
    (SELECT dow, visit_date, COUNT(*) AS CntDocsInOffice FROM 
     (SELECT DISTINCT dow, visit_date, doctor_id FROM 
      visits 
     WHERE visit_year = 2012) 
     GROUP BY dow, visit_date) 
GROUP BY dow; 

一番内側のSELECTは一日に一意の医師を選択します。
次の外側のSELECTは、1日あたりのユニークな医師の数をカウントします。
最も外側のSELECTは最終的に曜日の平均医師数を計算します。

+0

COUNT(*)はヌルをカウントします。 – Fionnuala

+0

@Remou:良い点。 'doctor_id'が必須フィールドであるかどうかによって異なります。 –

+0

ありがとう - これは素晴らしい仕事! doctor_idは必要ですので問題はありません。 3つの選択ステートメント、うわー。私は、午後の残りの部分をこの周りに私の頭を包み込むのに費やすと思う。 – Anubis584

0

方法について:

SELECT q.dow, 
     Avg(q.countofdoctor_id) AS avgofcountofdoctor_id 
FROM (SELECT v.visit_date, 
       v.dow, 
       COUNT(v.doctor_id) AS countofdoctor_id 
     FROM (SELECT DISTINCT visit_date, 
           dow, 
           doctor_id 
       FROM visits 
       WHERE visit_year = 2012) AS v 
     GROUP BY v.visit_date, 
        v.dow) AS q 
GROUP BY q.dow; 
+0

これも、ありがとう! Oliver Jacot-Descombesのコードと同じ結果が得られました。これらのうちの1つが他のものより効率的かどうか、または同じことをするにはちょっと違う方法があるかどうかはわかりません。しかし、両方の方法でそれを見ることができます。私はそれらを両方とも私の答えとすることができれば幸いです。 – Anubis584

関連する問題