计算访问查询的总体百分比

时间:2019-04-01 15:32:33

标签: sql ms-access

我有一个MS Access查询,它返回以下示例数据:

+-----+------+------+
| Ref | ANS1 | ANS2 |
+-----+------+------+
| 123 | A    | A    |
| 234 | B    | B    |
| 345 | C    | C    |
| 456 | D    | E    |
| 567 | F    | G    |
| 678 | H    | I    |
+-----+------+------+

是否可以使Access返回ANS1 = ANS2处的总百分比?

所以我的新查询将返回:

50

我知道如何对原始查询返回的记录进行计数,但不知道如何计算百分比。

2 个答案:

答案 0 :(得分:2)

由于您要查找整个数据集中满足某些条件的百分比,因此可以将任务简化为让函数返回1(在验证条件时)或{{1} }(未验证条件时),然后计算所有记录的平均值。

这可以通过多种方式实现,一个示例可能是使用基本的0语句:

iif

或者,使用MS Access中的布尔值使用select avg(iif(t.ans1=t.ans2,1,0)) from YourTable t (真)或-1(假)表示的知识,表达式可以简化为:

0

在以上每个选项中,将select -avg(t.ans1=t.ans2) from YourTable t 更改为表的名称。

答案 1 :(得分:0)

如果您知道如何获得计数,请两次应用相同的知识:

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]

这当然是假设至少有一行...因此它不会被零除。