我有一张表(tblExam),显示的考试数据得分设计如下:
考试名称:字符串
得分:数字(百分比)
基本上,我试图通过考试名称来提取记录,其中分数小于特定数量(本例中为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才能显示所有考试名称,但我无法提出正确的语法。
似乎您想显示所有名称组,以及每个组中的计数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
从查询中删除了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句