在聚合SQL中不计算NULL

时间:2014-03-26 15:26:02

标签: sql

可以对此SQL查询使用一点帮助。

假设我有一张名为StudentGrades的桌子,其中包含一个学生名单和一个标志,表明他们是否通过了课程。假设有很大一部分学生尚未获得成绩,我如何计算已经通过/失败或未获得成绩的学生的当前百分比。

ID     LastName         GradeGiven
-------------------------------
1      Bueller          PASS
2      Smith            FAIL
3      Carter           FAIL
4      Howell           NULL
5      Clinton          PASS
6      Brown            FAIL
.
.
.
48     Jones            NULL
49     Frank            NULL
50     Jenkins          NULL

我希望能够创建一个查询,显示已通过,失败并且尚未分配成绩的学生人数。为此,我创建了这个查询......

SELECT
  COUNT(GradeGiven) AS "Count of each Grade",
  GradeGiven,
  COUNT(GradeGiven * 100.0/(SELECT COUNT(*) from StudentGrades) AS "Percentage"
FROM 
  StudentGrades
GROUP BY 
  GradeGiven

我的问题是NULL显示为0,即使它存在。即使它没有价值,它不应该有计数吗?如果大部分成绩尚未填写,我原本预计会有45分和很大比例。但它是0.000

Count        GradeGiven         Percentage
------------------------------------------
0            NULL                 0.000
2            PASS                 4.000
3            FAIL                 6.000

1 个答案:

答案 0 :(得分:2)

使用count(*)count(1)

SELECT COUNT(*) AS "Count of each Grade",
       GradeGiven,
       COUNT(*) * 100.0/(SELECT COUNT(*) from StudentGrades) AS "Percentage"
FROM StudentGrades
GROUP BY GradeGiven;

count(<column name>)的困惑是我不认为应该使用它的原因,至少是SQL中的初学者。您可以在此问题中详细了解我的观点here