MySQL count用法

Count 函数可以用来统计表内符合条件的数据行数。

假设有一张数据库表如下:

CREATE TABLE `t_test_count` (
  `col_1` bigint(255) DEFAULT NULL,
  `col_2` varchar(255) DEFAULT NULL
)

表内记录如下图:

col_1col_2
10
20
30
40
50
61
71
81
91
101
11null

count(*)

count(*)会统计所有列,并返回表中所有记录行数。即使某一行个别列的值为null,也不会被忽略。

count(*)不会取出每一行具体的值,新版本的MYSQL会对count(*)进行优化,它会自动选取最小的可用索引进行遍历。因此,如果经常使用count(*)来计数,建议为表建立索引来提升性能。

SELECT count(*) FROM `t_test_count`;
count(col_1)
11

count(1)

count(1)会忽略所有列,并返回表中所有记录行数,也不会忽略列为null的记录。

count(1)会把取出的每一行记录放一个数值1进去,然后进行计数。

SELECT count(1) FROM `t_test_count`;
count(col_1)
11

count(列名)

count统计字段名称时,返回所有不为null的记录的行数,下方的SQL执行结果,我们可以看出,当使用count(col_1)统计行数的时候,得到的结果是11,而当我们使用count(col_2)统计行数的时候,则返回了10,因为col_2有一条记录值为null。

count(列名)在执行时会进行判断,如果列为not null,则会按行类加。如果列为允许null,会把列的记录全部取出,然后逐一遍历,并且排除值为null的数据。

count(列名)时,建议count(主键)来提升性能。

SELECT count(col_1) FROM `t_test_count`;
count(col_1)
11
SELECT count(col_2) FROM `t_test_count`;
count(col_2)
10

count(条件)

假设要查出所有表中col_1记录小于5和大于等于5的记录数,可以使用如下sql:

SELECT 
	count(col_1<5 or null) as '<5', 
	count(col_1>=5 or null) as '>=5' 
FROM 
	`t_test_count`;
<5>=5
47

在这里,我们给每一个count中不光加入了我们需要的条件,还额外加入了 or null,因为count统计的是记录不为null的行数,如果只是单纯的col_1<5,得到的结果将是false,依然不为null,所以那些大于等于5的记录数依然会被计数,你得到的结果将会是11。如果使用col_1<5 or null,它的意思是当记录值小于5,返回true(因为这里用的是or条件,所以当前者为true时,就不会执行后面的判断条件),当记录大于等于5时,则会返回null,这时候你就能够得到你想要的正确数值。

假设我们想要查询col_2为0和为1的记录数,我们还可以使用下面的SQL:

select 
	count(case col_2 when '0' then 1 else null end) as 'col_2 = 0',
	count(case col_2 when '1' then 1 else null end) as 'col_2 = 1'
from 
	t_test_count;
col_2 = 0col_2 = 1
55
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值