返回Access中列的唯一平均值

时间:2014-07-07 15:59:04

标签: sql ms-access

我正在尝试在Access中创建一个查询,以返回基于1-5答案量表(1 =差等等)的调查的平均值。我不能简单地做avg(q1),因为创建调查并将结果丢弃到数据库中的软件(自动数据专家可以)将问题评为0如果没有得到答复。这会扭曲结果。

我不能做......在哪里Q1> 1因为这消除了所有其他问题(每行有一个Q1,Q2等)。

所以,我试着做一个像这样的查询

(SELECT avg(VAL) FROM (SELECT ScannedData.Q1 as VAL FROM ScannedData WHERE ScannedData.Q1 > 1)t) AS AvgOfQ1

但问题是查询返回单个值并为所有行提供相同的值(例如5.82)。

正在创建的报告按类分组,因此我最终得到一个报告,其中包含A类Q1 5.82,B类Q1 5.82,C类Q1 5.82,依此类推。

除此之外 - 需要计算此调查的每个问题。

简而言之,如何通过上述查询获得每个班级分组的平均值。

提前感谢您的帮助。

根据要求添加如下:

该表包含问题结果。对于每个问题,都有一个值为0-6的列。因此,对于调查中的问题1,该列将命名为Q1,值为1-6。此外,还有一个className列,其重要性与调查所涉及的类有关。

所以,我可以有一个看起来像这样的记录

|Q1|Q2|Q3|Q4|ClassName        |
|1 |5 |4 |5 |Asbestos Training|
|3 |4 |0 |6 |Asbestos Training|
|3 |1 |3 |4 |Asbestos Training|
|4 |3 |5 |4 |Microsoft Word   |
|6 |1 |5 |3 |Microsoft Word   |
|0 |2 |5 |1 |Microsoft Word   |

通过上面的查询,我得到了像

这样的结果

石棉培训Q1Avg 5.82(不是上述结果的实际数字,只是示例) 微软培训Q1AVG 5.82

当我需要时(例如,使用上述数据)

石棉培训Q1Avg 2.33 Microsoft Word Q1Avg 5.00(0不需要计算,因为它被跳过了,不应该对结果产生偏差)。

我没有设计这个数据库。它是软件使用的格式。每当我们创建一个调查时,它都会删除一个新的访问数据库。

1 个答案:

答案 0 :(得分:2)

我想你可能想要条件聚合。在MS Access中,这看起来像:

select avg(iif(Q1 > 0, Q1, NULL)) as Q1_avg,
       avg(iif(Q2 > 0, Q2, NULL)) as Q2_avg,
       avg(iif(Q3 > 0, Q3, NULL)) as Q3_avg       
from ScannedData;

如果您想按班级进行此操作,请使用group by

select class, avg(iif(Q1 > 0, Q1, NULL)) as Q1_avg,
       avg(iif(Q2 > 0, Q2, NULL)) as Q2_avg,
       avg(iif(Q3 > 0, Q3, NULL)) as Q3_avg       
from ScannedData
group by class;