2012-03-08 93 views
1

我试图从Access 2010数据库中获得每天平均不同的计数,而且我似乎没有任何工作。我试过使用子查询,但我不知道如何将其链接到主要的。该表对每个办公室拜访一排,像这样:Access中每天的不同计数的平均值

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在我的头上这应该工作的平均数,但它不: 选择陶氏,AVG(COUNT(DISTINCT(doctor_id)))AS AvgDocsInOffice 从访问 WHERE visit_year = 2012 GROUP BY道琼斯

我试图让这个输出:

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计算每天唯一医生的数量。
最外面的SELECT最终计算一周中每天的平均医生数。

+0

COUNT(*)会计算空值。 – Fionnuala 2012-03-08 21:09:25

+0

@Remou:好点。这取决于“doctor_id”是否为必填字段。 – 2012-03-08 21:13:09

+0

谢谢 - 这很好! doctor_id是必需的,所以没有问题。哇,三个选择语句。我想我会在下午的剩余时间里围绕这个进行包围。 – Anubis584 2012-03-08 21:32:27

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的代码一样的结果。我不确定其中一个是否比另一个更有效率,或者只是一种不同的方式来做同样的事情。但它有助于看到这两种方式。希望我可以将它们标记为我的答案。 – Anubis584 2012-03-08 21:45:32