我有一张表(tblExam),显示了如下设计的考试数据分数:
考试名称:字符串
分数:数字(pecent)
基本上我试图通过考试名称拉取记录,其中得分低于特定数量(在我的情况下为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 :(得分:0)
我是否发现了矛盾?该查询要求结果&lt; 0.695但您的文字说您也在寻找结果&gt; 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;
答案 1 :(得分:0)
您似乎希望显示所有名称组,并在每个组中显示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()
只计算非空值。如果这看起来更清楚,您可以使用Sum()
代替Count()
:
Sum(IIf(e.Score < 0.695, 1, 0)) AS CountOfName
注意DISTINCTROW
在GROUP BY
查询中没有用,因为如果没有它,分组会使行唯一。所以我从查询中删除了DISTINCTROW
。