首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL---count()函数结果null时替换为0

在sql中,做count()统计时,如果结果null,这条数据是不显示的,但是经常会有类似的需求,比如:统计江西省下的某11个市的企业数量,如果有些城市企业数量0,会发现最后返回的结果不到11条...现在需要统计:江西商务厅下的所有的公司数量,按照city排序,sql很简单,如下: SELECT city, COUNT(*) AS count FROM entInfo WHERE department...吉安市', '宜春市', '抚州市', '上饶市' ) GROUP BY city 此时会得到如下结果,会发现,本来有11个市,但查询结果里面仅有8条数据,因为有三个市是没有数据的,查询结果null...这个sql可以这么写: SELECT t.city,count(h.id) as count from ( SELECT '南昌市' city UNION SELECT '景德镇市' city UNION...上饶市' city ) t LEFT JOIN intInfo on t.city=h.city and h.department='江西商务厅' GROUP BY t.city ORDER BY count

5.5K20

MYSQLcount(*)、count(列)、 count(1) 理解

结论: 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值NULL...count(列名)只包括列名那一列,在统计结果的时候,会忽略列值空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值NULL时,不统计。...+----------+ | 10000000 | +----------+ 1 row in set 验证执行效果 cout(*)和count(1) 没区别,但是cout(列名) 不统计 null...*name 的执行计划 type = All 是进行的全表扫描,而count(*) count(1), count(列,主键) 的type 是null,执行时甚至不用访问表或索引 MySQL5.7文档中有一段话...COUNT(1)只有在第一列被定义NOT NULL时才进行与COUNT(*)相同的优化

2.5K41
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL count()函数及其优化count(1),count(*),count(字段)区别

(1),count(*),count(字段)区别 count(1)和count(*) 作用 都是检索表中所有记录行的数目,不论其是否包含null值 区别 count(1)比count(*)效率高 二 ....count(字段)与count(1)和count(*)的区别 count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值null的记录 任何情况下SELECT COUNT(1) FROM...WHERE COL2 = ‘value’ 的出现 如果表没有主键,那么count(1)比count(*)快 如果有主键,那么count(主键,联合主键)比count(*)快 如果表只有一个字段,count...(*)最快 count(1)跟count(主键)一样,只扫描主键。...count(*)跟count(非主键)一样,扫描整个表 明显前者更快一些。

2.6K60

MySQLcount(*)、count(1)和count(列名)区别

count(1)比count()效率高。 count(字段)是检索表中的该字段的非空行数,不统计这个字段值null的记录。...count(1) and count(字段) count(1) 会统计表中的所有的记录数,包含字段null 的记录 count(字段) 会统计该字段在表中出现的次数,忽略字段null 的情况。...即不统计字段null 的记录。...count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值NULL count(1)包括了忽略所有列,...用1代表代码行,在统计结果的时候,不会忽略列值NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值NULL

3.4K20

MySQLcount(字段) ,count(主键 id) ,count(1)和count(*)的区别

首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...count(1) 扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。...但是这种需要专门优化的情况太多了,而且 MySQL 已经优化过 count(*) 了,你直接使用这种语句就可以了。

2.3K10

MySQLcount(字段) ,count(主键 id) ,count(1)和count(*)的区别

首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...count(1) 扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。...但是这种需要专门优化的情况太多了,而且 MySQL 已经优化过 count(*) 了,你直接使用这种语句就可以了。

2.5K30

MySQLNull会导致5个问题,个个致命!

从上述结果可以看出,当使用的是 count(name) 查询时,就丢失了两条值 NULL 的数据丢失。 解决方案 如果某列存在 NULL 值时,就是用 count(*) 进行数据统计。...说明:count(*) 会统计值 NULL 的行,而 count(列名) 不会统计此列为 NULL 值的行。...2.distinct 数据丢失 当使用 count(distinct col1, col2) 查询时,如果其中一列 NULL,那么即使另一列有不同的值,那么查询的结果也会将数据丢失,如下 SQL 所示...4.导致空指针异常 如果某列存在 NULL 值时,可能会导致 sum(column) 的返回结果 NULL 而非 0,如果 sum 查询的结果 NULL 就可以能会导致程序执行时空指针异常(NPE)...从上述结果可以看出,即使 name 中有 NULL 值也不会影响 MySQL 使用索引进行查询。

1.7K20

MySQLcount(*)、count(主键id)、count(字段)和count(1)那种效率更高?

MySQL 中,COUNT 函数是一个非常常用的聚合函数,它用于计算某列或某表达式在查询结果中出现的次数。...COUNT(*) 表示计算所有行数,而 COUNT(主键id) 表示计算主键(即唯一标识一条记录的字段)不为 NULL 的记录数。...这里需要注意的是,如果主键是一个自增长列,那么 COUNT(*) 和 COUNT(主键id) 得到的结果是相同的,因为自增长列的值必定不为 NULL。那么,这两种写法的效率如何呢?...COUNT(字段) 表示计算该字段不为 NULL 的记录数,而 COUNT(1) 表示计算所有行数,这里需要注意的是,COUNT(1) 和 COUNT(*) 的作用是相同的。...但是,如果在多表查询的情况下使用 COUNT(1) 或 COUNT(字段),就需要注意它们的性能问题了。在这种情况下,MySQL 必须进行联接操作,然后再统计记录数。

98430

MySQLcount(*)、count(主键id)、count(字段)和count(1)那种效率更高?

至于分析性能差别的时候,你可以记住这么几个原则: server层要什么就给什么; InnoDB只给必要的值; 现在的优化器只优化了count(*)的语义“取行数”,其他“显而易见”的优化并没有做。...对于count(字段)来说: 如果这个“字段”是定义not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加; 如果这个“字段”定义允许null,那么执行的时候,判断到有可能是...但是count(*)是例外,并不会把全部字段取出来,而是专门做了优化,不取值。count(*)肯定不是null,按行累加。...看到这里,你一定会说,优化器就不能自己判断一下吗,主键id肯定非空啊,为什么不能按照count(*)来处理,多么简单的优化啊。 当然,MySQL专门针对这个语句进行优化,也不是不可以。...但是这种需要专门优化的情况太多了,而且MySQL已经优化过count(*)了,你直接使用这种用法就可以了。

4.6K50

MySQL查询---COUNT函数

*:查询符合条件的行数,和列值是否NULL无关,返回结果都会返回。 常量:查询符合条件的行数,和列值是否NULL无关,返回结果都会返回。...因为Mysql官方文档写了这么一句话: InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way....我个人建议使用count(*),因为SQL92标准中制定count(*)标准统计行数的语法,所以Mysql一直在不断地对count(*)做一定的优化。那有人说count(id)效率会不会更高?...count(*)一样全表检索,但是不会取id值,因为在索引树就可以得到结果,所以count(id)需要取到数据再过滤idnull的数据效率方面肯定是慢上不少的。...可以看到条数只有50万条,因为另外50万条name值null所以被忽略了,执行时间1.38秒,这是我测试了多次取的最短时间。

3.1K20

MySQL COUNT性能分析

对于count(*),MySQL优化器会找到最小的那棵索引树然后进行遍历。 如果某张大表需要经常性的进行count(*)操作,可以考虑单独建立一张表进行保存大表的记录行数。 COUNT的具体含义?...COUNT()是一个聚合函数,对于返回的结果集需要一行一行的进行判断,如果COUNT函数中的参数不为NULL,累计值就加,否则不加。 COUNT的几种用法?...COUNT(字段),如果字段定义NOT NULL的话,Server层从记录中取到字段以后判断不可能为NULL,按行累加;但是如果字段允许NULL,Server层就有可能取到NULL的记录,此时需要把记录中的值进行判断一下...,不是NULL才可以累加。...COUNT效率 COUNT(字段) < COUNT(主键ID) < COUNT(1) ≈ COUNT(*)

96410

MySQL count知多少

其中c1,c2字段内容完全一致,差别是字段约束不一样(c1不可为空,c2可为空),c3与c1,c2的差别在于c1中aa开头的值在c3中null,其他内容一样。...3.1 MyISAM引擎表 3.1.1 查询整张表数据量 如果想精确查询一张MyISAM表的数据量,使用 count(主键) count(1) count(*) 效率均一致,直接查出准确结果,耗时几乎...in set (1.38 sec) 简单的对比发现,查询性能结果 count(主键) < count(1) ≈ count(*) 但是查看执行计划都是如下情况 mysql> explain select...count(1):也是遍历整张表,因为每行的结果都是1(非空),所以可以直接计数,无需判断是否空。...3.2.4 count(普通字段) 因为nums_3表的c2字段允许空,但是内容均不为空,c3字段允许空,但是存在内容空的情况。

3.4K20
领券