我刚刚在MS Access中编写查询时遇到问题。我正在尝试编写一个查询,它将从复制的样本结果列表中提取前两个有效样本,然后想要平均样本值。我编写了一个查询,它只使用 两个有效样本来提取样本并对这些值求平均值。但是,我的查询不会在有两个以上有效样本结果的情况下提取样本。这是我的疑问:
SELECT temp_platevalid_table.samp_name AS samp_name, avg (temp_platevalid_table.mean_conc) AS fin_avg, count(temp_platevalid_table.samp_valid) AS sample_count
FROM Temp_PlateValid_table
WHERE (Temp_PlateValid_table.id In (SELECT TOP 2 S.id
FROM Temp_PlateValid_table as S
WHERE S.samp_name = S.samp_name and s.samp_valid=1 and S.samp_valid=1
ORDER BY ID))
GROUP BY Temp_PlateValid_table.samp_name
HAVING ((Count(Temp_PlateValid_table.samp_valid))=2)
ORDER BY Temp_PlateValid_table.samp_name;
以下是我正在尝试做的一个例子:
ID Samp_Name Samp_Valid Mean_Conc
1 54d2d2 1 15
2 54d2d2 1 20
3 54d2d2 1 25
平均mean_conc应该是17.5,但是,对于我当前的查询,我根本不会收到54d2d2的值。有没有办法调整我的查询,以便为具有两个以上有效值的样本获取值?请注意我正在使用MS Access,所以我认为我不能使用更高级的SQL代码(分区依据等)。
提前感谢您的帮助!
答案 0 :(得分:1)
这是你想要的吗?
select pv.samp_name, avg(pv.value_conc)
from Temp_PlateValid_table pv
where pv.samp_valid = 1 and
pv.id in (select top 2 id
from Temp_PlateValid_table as pv2
where pv2.samp_name = pv.samp_name and pv2.samp_valid = 1
)
group by pv.samp_name;
您可能需要avg(pv.value_conc * 1.0)
。