在sql中,做count()统计时,如果结果为null,这条数据是不显示的,但是经常会有类似的需求,比如:统计江西省下的某11个市的企业数量,如果有些城市企业数量为0,会发现最后返回的结果不到11条。怎么办?
有如下的数据:
现在需要统计:江西商务厅下的所有的公司数量,按照city排序,sql很简单,如下:
SELECT
city,
COUNT(*) AS count
entInfo
WHERE
department = '江西商务厅'
AND city IN (
'南昌市',
'景德镇市',
'萍乡市',
'九江市',
'新余市',
'鹰潭市',
'赣州市',
'吉安市',
'宜春市',
'抚州市',
'上饶市'
GROUP BY
此时会得到如下结果,会发现,本来有11个市,但查询结果里面仅有8条数据,因为有三个市是没有数据的,查询结果为null,所有没有显示。
这个sql可以这么写:
SELECT t.city,count(h.id) as count from
SELECT '南昌市' city UNION
SELECT '景德镇市' city UNION
SELECT '萍乡市' city UNION
SELECT '九江市' city UNION
SELECT '新余市' city UNION
SELECT '鹰潭市' city UNION
SELECT '赣州市' city UNION
SELECT '吉安市' city UNION
SELECT '宜春市' city UNION
SELECT '抚州市' city UNION
SELECT '上饶市' city
LEFT JOIN intInfo
on t.city=h.city
and h.department='江西商务厅'
GROUP BY t.city
ORDER BY count desc
查询结果如下:
在sql中,做count()统计时,如果结果为null,这条数据是不显示的,但是经常会有类似的需求,比如:统计江西省下的某11个市的企业数量,如果有些城市企业数量为null,会发现最后返回的结果不到11条。怎么办?
sql 中 count 计算null值的个数
今天上班遇到一个求没有下发过任务的号码个数,因为没有标记字段,需要left join 查null的个数,
之前一直count(1) / count(*) 遇到这种情况还是想了一会儿,所以记录一下
count求null值
count(if(字段 is null ,1,0))
当单列中含有NULL值的时候,SUM()会忽略该NULL值进行求和。如果涉及多列的求和运算,某一列的值为NULL,会忽略该组合列(多个参与求和的列),也即忽略该行,该行返回的求和数将为null。
AVG()
AVG()和SUM()相同,也会忽略NULL值进行运算
COUNT()
这个聚集函数处理NULL值的时候就比较特殊了,有以下两种情况
将SQL查询中的COUNT函数结果为NULL的部分替换成。可以使用IFNULL函数,将COUNT函数的结果与进行比较,如果结果为NULL,则返回,否则返回COUNT函数的结果。示例代码如下:
SELECT IFNULL(COUNT(column_name), ) FROM table_name;
其中,column_name为需要统计的列名,table_name为需要查询的表名。