首页
学习
活动
专区
工具
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.4K41
您找到你想要的搜索结果了吗?
是的
没有找到

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.3K20

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 必须进行联接操作,然后再统计记录数。

94130

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(*)

95410

如何检查 MySQL 中的列是否空或 Null

MySQL数据库中,我们经常需要检查某个列是否空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。...在本文中,我们将讨论如何在MySQL中检查列是否空或Null,并探讨不同的方法和案例。...图片使用 IS NULL 或 IS NOT NULL 运算符IS NULL和IS NOT NULLMySQL中用于检查列是否空或Null的运算符。...使用聚合函数检查列是否空聚合函数也可以用于检查列是否空。例如,我们可以使用COUNT函数统计空的行数来判断列是否空。...以下是使用COUNT函数检查列是否空的方法:SELECT COUNT(*) AS count FROM table_name WHERE column_name IS NULL;这个查询将返回满足条件的行数

52220
领券