我正在尝试在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不需要计算,因为它被跳过了,不应该对结果产生偏差)。
我没有设计这个数据库。它是软件使用的格式。每当我们创建一个调查时,它都会删除一个新的访问数据库。
答案 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;