相关文章推荐
无聊的柚子  ·  【实习招聘】2024年春学期学军中学高中心理 ...·  1 年前    · 
非常酷的手套  ·  华高莱斯丨城市洞察:大都市光环下的德国中小城 ...·  1 年前    · 
强健的松鼠  ·  如何在Python中拆分字符串并提取一个单词?·  1 年前    · 
八块腹肌的西装  ·  daterangepicker的使用以及后台 ...·  1 年前    · 
俊秀的拐杖  ·  mongodb 计数器, ...·  1 年前    · 
Code  ›  sql 语句中count()有条件的时候为什么要加上or null开发者社区
https://cloud.tencent.com/developer/article/1442134
傲视众生的高山
2 年前
作者头像
别先生
0 篇文章

sql 语句中count()有条件的时候为什么要加上or null

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 别先生 > sql 语句中count()有条件的时候为什么要加上or null

sql 语句中count()有条件的时候为什么要加上or null

作者头像
别先生
发布 于 2019-06-03 18:11:54
1.2K 0
发布 于 2019-06-03 18:11:54
举报

1、sql 语句中count()有条件的时候为什么要加上or null。

如count(province = '浙江' or NULL) 这部分,为什么要加上or NULL,直接count(province='浙江')有什么问题吗?不就是要找province = '浙江'的数据吗,为什么要计算NULL的数据。

答案: 因为当 province不是浙江时 province='浙江' 结果false。不是 NULL, count在值是NULL是不统计数, (count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,因此前者单引号内不管输入什么值都会统计出所有记录数),至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。当province不为浙江时province = '浙江' or NULL 的结果是NULL,Count才不会统计上这条记录数


2、以上参考链接,换汤不换药。分析如下所示。为啥用到上面的这个知识点了呢,因为要做多个数据表、的各个省份、数据量统计。因为每天都要统计。需要统计增量和全量数据量,一开始是使用SQL统计的,发现每天重复一些没有用的工作,甚是无聊,后来我创建了视图,并把这块工作交给了同事,同时想了一下午,有没有更加方便快捷的sql,经过一下午的思考和尝试,感觉没有更加好的解决方法,who知道,后来来了一个同事,专一做etl的,他写了一个大SQL,解决了这个问题,一个sql就统计出多个数据表、的各个省份、数据量统计。再次验证,头发短,见识少,轻易说不行,哎,知识学无止境。

分析如下所示:

先说业务场景,再说具体原因。


3、业务场景。

模拟的SQL如下所示,主要事项同库、多个数据表、每个省份的全量的数据量。

1 SELECT 'db_province_1' as tableName,count(province='浙江省' or null) as 浙江省,count(province='北京省' or null) as 北京省,count(province='河南省' or null) as 河南省,count(province='江苏省' or null) as 江苏省,count(province='辽宁省' or null) as 辽宁省,count(province='吉林省' or null) as 吉林省,count(province='河北省' or null) as 河北省,count(province='天津省' or null) as 天津省,count(province='深圳省' or null) as 深圳省,count(province='西藏省' or null) as 西藏省,count(province='四川省' or null) as 四川省 from tb_province
2 union all
3 SELECT 'db_province_2' as tableName,count(province='浙江省' or null) as 浙江省,count(province='北京省' or null) as 北京省,count(province='河南省' or null) as 河南省,count(province='江苏省' or null) as 江苏省,count(province='辽宁省' or null) as 辽宁省,count(province='吉林省' or null) as 吉林省,count(province='河北省' or null) as 河北省,count(province='天津省' or null) as 天津省,count(province='深圳省' or null) as 深圳省,count(province='西藏省' or null) as 西藏省,count(province='四川省' or null) as 四川省 from tb_province_2
 
推荐文章
无聊的柚子  ·  【实习招聘】2024年春学期学军中学高中心理实习老师招募
1 年前
非常酷的手套  ·  华高莱斯丨城市洞察:大都市光环下的德国中小城镇(一)——德国中小城镇界定_人口
1 年前
强健的松鼠  ·  如何在Python中拆分字符串并提取一个单词?
1 年前
八块腹肌的西装  ·  daterangepicker的使用以及后台处理_datetimerange类型后端如何接收-CSDN博客
1 年前
俊秀的拐杖  ·  mongodb 计数器, 如何能确保并发也没问题呢? - SegmentFault 思否
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号