sql 语句中count()有条件的时候为什么要加上or null
参考:https://blog.csdn.net/qq_32719287/article/details/79513164
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如下所示,主要事项同库、多个数据表、每个省份的全量的数据量。
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
union all
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
union all
SELECT 'db_province_3' 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_3
效果如下所示:
这样的话,我每天一个sql就解决了我的需求,第一版是执行几十个sql,第二版执行几十个视图。第一版和第二版都让人痛不欲生的。第三版,即介绍这版大大减轻了工作量哦。
分析如下所示:
具体执行sql如下所示:
可以看到如果将true或者false替换为province='浙江省'的话,执行结果就是统计出每张表各个省份的数据表数据量。
最后两个sql对比就可以看到,执行结果的效果。自己可以动手试试哦。
待续......
sql 语句中count()有条件的时候为什么要加上or null的更多相关文章
- SQL语句中count(1)count(*)count(字段)用法的区别
SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和cou ...
- SQL语句中count(1)count(*)count(字段)用法的区别(转)
SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和cou ...
- SQL语句中过滤条件放在on、where、having的区别和联系
摘要:SQL语句中,过滤条件放在不同筛选器on.where和having的区别和联系. 综述 在<SQL语句中过滤条件放在on和where子句中的区别和联系>中,介绍了多表关联SQL语 ...
- SQL语句中过滤条件放在on和where子句中的区别和联系
摘要: 介绍在多表关联SQL语句中,过滤条件放在on和where子句中的区别--inner join中没区别,外连接就不一样. 综述 蚂蚁金服的一道SQL面试题如下:SQL语句中,过滤条件放在on ...
- 转>>在同一个sql语句中如何写不同条件的count数量
今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...
- sql 语句中使用条件判断case then else end
sql 语句中使用条件判断case then else end范例: SELECT les.[nLessonNo] FROM BS_Lesson AS les WHERE les.[sClassCod ...
- 腾讯一面问我SQL语句中where条件为什么写上1=1
目录 where后面加"1=1″还是不加 不用where 1=1 在多条件查询的困惑 使用where 1=1 的好处 使用where 1=1 的坏处 where后面加"1=1″还是 ...
- (转)select 1 from ... sql语句中的1代表什么意思? .
select 1 from ..., sql语句中的1代表什么意思?查出来是个什么结果? select 1 from table;与select anycol(目的表集合中的任意一行 ...
- sql语句中where,have,on的区别
一.where和on的区别 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. ...
随机推荐
- 几道c/c++练习题
1.以下三条输出语句分别输出什么?[C易] char str1[] = "abc"; char str2[] = "abc"; const char str3[ ...
- Cucumber语法格式
@login Feature: Login @T1 Scenario: Login with correct credentail Given I open login page When I ent ...
- python 高级部分
伴随视频可以观看 因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执 ...
- 各种类型文件的Content-Type
各种类型文件的Content-Type 2017年11月27日 10:00:56 thebigdipperbdx 阅读数:7360 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- python ftp批量上传文件下载文件
# encoding:utf-8 from ftplib import FTPimport osimport sys _XFER_FILE = 'FILE'_XFER_DIR = 'DIR' clas ...
- 路径规划算法之Bellman-Ford算法
最近由于工作需要一直在研究Bellman-Ford算法,这也是我第一次用C++编写代码. 1.Bellman-Ford算法总结 (1)Bellman-Ford算法计算从源点(起始点)到任意一点的最短路 ...
- Solr配置步骤
1. 配置步骤说明 (1)配置Solr服务器. (2)配置SolrHome.(Solr服务的主目录,磁盘) (3)在Solr服务器中加载SolrHome. (4)java程序访问Solr服务器,实现全 ...
- 动态将ASPX生成HTML网页并将网页导出PDF
1.首先要找到wnvhtmlconvert.dll这个文件,并引入项目中. 2.Server.Execute("pos.aspx?id=" + ids); 执行相应的aspx网页 ...
- 转载-Mac下iterm无法使用rz并提示waiting to receive.**B0100000023be50
原文链接:https://www.kissfree.cn/2530.html 安装rz sz 1 2 brew install lrzsz 运行rz会报类似错:rz会出现?z waiting ...
- openwrt 编译
完整的编译过程: http://www.280i.com/tech/3353.html源更新: https://blog.csdn.net/ypbsyy/article/details/8121836 ...