Sql 计算访问查询的总百分比
我有一个MS Access查询,它返回以下示例数据:Sql 计算访问查询的总百分比,sql,ms-access,Sql,Ms Access,我有一个MS Access查询,它返回以下示例数据: +-----+------+------+ |参考| ANS1 | ANS2| +-----+------+------+ |123 | A | A| |234 | B | B| |345 | C | C| |456 | D | E| |567 | F | G| |678 | H | I| +-----+------+------+ Access是否可以返回总百分比,其中ANS1=ANS2 因此,我的新查询将返回: 50 我知道如何获取原
+-----+------+------+
|参考| ANS1 | ANS2|
+-----+------+------+
|123 | A | A|
|234 | B | B|
|345 | C | C|
|456 | D | E|
|567 | F | G|
|678 | H | I|
+-----+------+------+
Access是否可以返回总百分比,其中ANS1=ANS2
因此,我的新查询将返回:
50
我知道如何获取原始查询返回的记录计数,但不知道如何计算百分比。如果您知道如何获取计数,请将相同的知识应用两次:
SELECT Count([ANS1]) As MatchCount FROM [Data]
WHERE [ANS1] = [ANS2]
除以总数
SELECT Count([ANS1]) As AllCount FROM [Data]
要在基本SQL查询中组合这两种查询,需要一个“虚拟”查询,因为Access不允许仅选择原始数据:
SELECT TOP 1
((SELECT Count([ANS1]) As MatchCount FROM [Data] WHERE [ANS1] = [ANS2])
/
(SELECT Count([ANS1]) As AllCount FROM [Data]))
AS MatchPercent
FROM [Data]
这当然假设至少有一行。。。因此它不会被零除。因为您要查找整个数据集中满足某个条件的百分比,所以任务可以简化为让函数返回
1
(当条件被验证时)或0
(当条件未被验证时),然后计算所有记录的平均值
这可以通过多种方式实现,例如使用基本的iif
语句:
从表t中选择平均值(iif(t.ans1=t.ans2,1,0))
或者,利用MS-Access中的布尔值是使用-1
(True)或0
(False)表示的知识,表达式可以简化为:
从表t中选择-avg(t.ans1=t.ans2)
在上述每一项中,将YourTable
更改为表名