SQL判空时赋值
SQL做统计查询时,经常需要在分组之后统计另一个字段的总数。这是往往会遇到COUNT(待统计字段)结果为NULL的情况。如果直接将结果NULL发送给调用者,对方会很难处理。于是需要在传出判断:若为空,则传0。
要实现这一功能,可使用ISNULL函数。
函数调用方式
ISNULL(需要进行判空的数值,希望判空时返回的值)
调用示例
表Class(AID,班级名称,班主任姓名)
AID | Name | HeadTeacher |
---|---|---|
1 | 高一一班 | …… |
2 | 高一二班 | …… |
3 | 高一三班 | …… |
4 | 高二一班 | …… |
表Student(AID,学生姓名,所在班级)
AID | Name | ClassAID |
---|---|---|
1 | 张三 | 1 |
2 | 李四 | 1 |
3 | 王五 | 1 |
4 | 张三 | 2 |
5 | 李四 | 2 |
6 | 王五 | 2 |
7 | 赵六 | 2 |
显然,Student表的ClassAID字段引用自Class表的AID字段,用以说明这个同学属于哪个班级
--这是一个统计查询:查询各个班都分别有多少学生
SELECT
[ClassAID] = C.AID
,[StudentNumber] = COUNT(S.AID)
FROM Class AS C
JOIN Student AS S ON S.ClassAID = C.AID
GROUP BY C.AID
--上面这个查询会出现一个问题,倘若有一个班级没有任何学生,那么那个班级的‘学生数’就会被统计为NULL
结果会是这样的:
ClassAID | StudentNumber |
---|---|
1 | 3 |
2 | 4 |
3 | NULL |
4 | NULL |
于是希望在结果为空的时候显示0而非NULL
代码如下:
--这是一个统计查询:查询各个班都分别有多少学生
SELECT
[ClassAID] = C.AID
,[StudentNumber] = ISNULL(COUNT(S.AID),0)
FROM Class AS C
JOIN Student AS S ON S.ClassAID = C.AID
GROUP BY C.AID
如此,结果就是这样的:
ClassAID | StudentNumber |
---|---|
1 | 3 |
2 | 4 |
3 | 0 |
4 | 0 |