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.695WHERE 移动到 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

注意 DISTINCTROWGROUP BY 查询中没有用,因为没有它分组会使行唯一。所以我从查询中删除了 DISTINCTROW