MS 访问计数查询没有产生想要的结果
MS Access count query does not produce wanted results
我有一个 table (tblExam) 显示考试数据分数设计如下:
考试名称:String
分数: number(percent)
基本上,我试图通过考试名称提取分数低于特定数量(在我的情况下为 0.695)的记录。
我正在使用以下语句获取结果:
SELECT DISTINCTROW tblExam.name, Count(tblExam.name) AS CountOfName
FROM tblExam WHERE (((tblExam.Score)<0.695))
GROUP BY tblExam.name;
这工作正常但不显示有 0 条记录超过 0.695 的考试;换句话说,我得到这个:
Exam Name count
firstExam 2
secondExam 1
thirdExam 3
0 的计数和任何分数高于 0.695 的考试都不会显示。我想要的是这样的:
Exam Name count
firstExam 2
secondExam 1
thirdExam 3
fourthExam 0
fifthExam 0
sixthExam 2
.
..
.etc...
我希望我在这里说得有道理。我认为我需要某种 LEFT JOIN 来显示所有考试名称,但我想不出正确的语法。
我发现矛盾了吗?该查询要求结果 <0.695,但您的文字说您也在寻找结果 >0.695。也许我不明白。这是否为您提供了您正在寻找的东西:
SELECT DISTINCTROW tblExam.ExamName, Count(tblExam.ExamName) AS CountOfExamName
FROM tblExam
WHERE (((tblExam.Score)<0.695 Or (tblExam.Score)>0.695))
GROUP BY tblExam.ExamName;
您似乎想要显示所有 name 个组,以及每个组中 Score < 0.695
的计数。所以我认为您应该将 < 0.695
从 WHERE
移动到 Count()
表达式 --- 实际上删除 WHERE
子句。
SELECT
e.name,
Count(IIf(e.Score < 0.695, 1, Null)) AS CountOfName
FROM tblExam AS e
GROUP BY e.name;
之所以有效,是因为 Count()
只计算非 Null 值。如果看起来更清楚,您可以使用 Sum()
而不是 Count()
:
Sum(IIf(e.Score < 0.695, 1, 0)) AS CountOfName
注意 DISTINCTROW
在 GROUP BY
查询中没有用,因为没有它分组会使行唯一。所以我从查询中删除了 DISTINCTROW
。
我有一个 table (tblExam) 显示考试数据分数设计如下:
考试名称:String
分数: number(percent)
基本上,我试图通过考试名称提取分数低于特定数量(在我的情况下为 0.695)的记录。
我正在使用以下语句获取结果:
SELECT DISTINCTROW tblExam.name, Count(tblExam.name) AS CountOfName
FROM tblExam WHERE (((tblExam.Score)<0.695))
GROUP BY tblExam.name;
这工作正常但不显示有 0 条记录超过 0.695 的考试;换句话说,我得到这个:
Exam Name count
firstExam 2
secondExam 1
thirdExam 3
0 的计数和任何分数高于 0.695 的考试都不会显示。我想要的是这样的:
Exam Name count
firstExam 2
secondExam 1
thirdExam 3
fourthExam 0
fifthExam 0
sixthExam 2
.
..
.etc...
我希望我在这里说得有道理。我认为我需要某种 LEFT JOIN 来显示所有考试名称,但我想不出正确的语法。
我发现矛盾了吗?该查询要求结果 <0.695,但您的文字说您也在寻找结果 >0.695。也许我不明白。这是否为您提供了您正在寻找的东西:
SELECT DISTINCTROW tblExam.ExamName, Count(tblExam.ExamName) AS CountOfExamName
FROM tblExam
WHERE (((tblExam.Score)<0.695 Or (tblExam.Score)>0.695))
GROUP BY tblExam.ExamName;
您似乎想要显示所有 name 个组,以及每个组中 Score < 0.695
的计数。所以我认为您应该将 < 0.695
从 WHERE
移动到 Count()
表达式 --- 实际上删除 WHERE
子句。
SELECT
e.name,
Count(IIf(e.Score < 0.695, 1, Null)) AS CountOfName
FROM tblExam AS e
GROUP BY e.name;
之所以有效,是因为 Count()
只计算非 Null 值。如果看起来更清楚,您可以使用 Sum()
而不是 Count()
:
Sum(IIf(e.Score < 0.695, 1, 0)) AS CountOfName
注意 DISTINCTROW
在 GROUP BY
查询中没有用,因为没有它分组会使行唯一。所以我从查询中删除了 DISTINCTROW
。