我有一个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
我知道如何对原始查询返回的记录进行计数,但不知道如何计算百分比。
答案 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]
这当然是假设至少有一行...因此它不会被零除。