Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算访问查询的总百分比_Sql_Ms Access - Fatal编程技术网

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

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 我知道如何获取原

我有一个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

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

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

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
更改为表名