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. ...
随机推荐
- <Android基础> (六) 数据存储 Part 2 SharedPreferences方式
6.3 SharedPreferences存储 SharedPreferences使用键值对的方式来存储数据.同时支持多种不同的数据类型. 6.3.1 将数据存储到SharedPreferences中 ...
- HF-01
胡凡 本书在第2章对C语言的语法进行了详细的入门讲解,并在其中融入了部分C+的特性. 第3-5章是 入门部分. 第3章 初步训练读者最基本的编写代码能力: 第4章对 常用介绍,内容重要: 第5章是 ...
- BZOJ2882工艺
题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...
- http验证
read -p "输入要添加的用户名: " USERNAME read -p "输入密码: " PASSWD printf "$USERNAME:$( ...
- consul剔除节点
查询节点注册 curl -s http://192.168.1.1:8500/v1/catalog/service/aaa | python -m json.tool 删除注册信息 curl http ...
- 简易RPC
暴露服务: package com.saiarea; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; impo ...
- [Luogu 4316] 绿豆蛙的归宿
题目链接 一道基础的 \(DAG\) 上期望 \(DP\). 给出一个有向无环图,起点为 \(1\) 终点为 \(N\),每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点. ...
- vue开发常用配置
// src/main.js function setHtmlFontSize() { const baseSize = 100 // 由于浏览器字体最小为12px,故这个值要设置大一点,保证计算所得 ...
- MySQL8.0
序言 my.ini [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=D:\\DataBase\\mysql-8.0.12-winx64 # 设 ...
- java里getter和setter的作用(转载)
[java]类中使用getter和setter的优势 http://www.importnew.com/9716.html java有三大特性:封装,继承还有多态. 而今天,我来讲一下其中最重要的特性 ...