Mysql count函数

概念

count()是MySQL中用来统计表中记录的一个函数,返回条件的行数

用法

新建一张student表;

CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `sex` varchar(255) DEFAULT NULL COMMENT '性别',
  `class` varchar(255) DEFAULT NULL COMMENT '班级',
  `score` varchar(255) DEFAULT NULL COMMENT '成绩',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入6条数据

INSERT INTO `test`.`student`(`id`, `name`, `age`, `sex`, `class`, `score`) VALUES (1, '张三', 15, '男', '高一(6)班', '97');
INSERT INTO `test`.`student`(`id`, `name`, `age`, `sex`, `class`, `score`) VALUES (2, '李四', 16, '男', '高一(4)班', '');
INSERT INTO `test`.`student`(`id`, `name`, `age`, `sex`, `class`, `score`) VALUES (3, '王五', 15, '男', '高一(5)班', '84');
INSERT INTO `test`.`student`(`id`, `name`, `age`, `sex`, `class`, `score`) VALUES (4, '刘筱筱', 14, '女', '高一(4)班', '98');
INSERT INTO `test`.`student`(`id`, `name`, `age`, `sex`, `class`, `score`) VALUES (5, '李静', 15, '女', '高一(5)班', '98');
INSERT INTO `test`.`student`(`id`, `name`, `age`, `sex`, `class`, `score`) VALUES (6, '李蕊', 14, '女', '高一(4)班', NULL);

查询所有记录

mysql> select * from student;
+----+--------+------+------+-------------+-------+
| id | name   | age  | sex  | class       | score |
+----+--------+------+------+-------------+-------+
|  1 | 张三   |   15 || 高一(6)班 | 97    |
|  2 | 李四   |   16 || 高一(4)班 |       |
|  3 | 王五   |   15 || 高一(5)班 | 84    |
|  4 | 刘筱筱 |   14 || 高一(4)班 | 98    |
|  5 | 李静   |   15 || 高一(5)班 | 98    |
|  6 | 李蕊   |   14 || 高一(4)班 | NULL  |
+----+--------+------+------+-------------+-------+
6 rows in set (0.00 sec)

count(*)

返回表中的记录数(包括所有列),相当于统计表的行数(不会忽略列值为NULL的记录)

mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

count(1)

忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替(不会忽略列值为NULL的记录)

mysql> select count(1) from student;
+----------+
| count(1) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

count(列名)

返回列名指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内

mysql> select count(score) from student;
+--------------+
| count(score) |
+--------------+
|            5 |
+--------------+
1 row in set (0.00 sec)

count(distinct 列名)

只包括列名指定列,返回指定列的不同值的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。

mysql> select count(distinct score) from student;
+-----------------------+
| count(distinct score) |
+-----------------------+
|                     4 |
+-----------------------+
1 row in set (0.00 sec)

count(*)&count(1)&count(列名)执行效率比较:

  • 如果列为主键,count(列名)效率优于count(1)
  • 如果列不为主键,count(1)效率优于count(列名)
  • 如果表中存在主键,count(主键列名)效率最优
  • 如果表中只有一列,则count(*)效率最优
  • 如果表有多列,且不存在主键,则count(1)效率优于count(*)

count带条件查询

1.count()函数中使用条件表达式加or null来实现,作用就是当条件不满足时,函数变成了count(null)不会统计数量

mysql> select count(score > 90  or null) from student;
+----------------------------+
| count(score > 90  or null) |
+----------------------------+
|                          3 |
+----------------------------+
1 row in set (0.00 sec)

2.count()函数中使用if表达式来实现,当条件满足时表达式的值为非空,条件不满足时表达式值为NULL;

mysql> select count(if(score > 90, 1, null)) from student;
+--------------------------------+
| count(if(score > 90, 1, null)) |
+--------------------------------+
|                              3 |
+--------------------------------+
1 row in set (0.00 sec)

3.count()函数中使用case when表达式来实现,当条件满足时表达式的结果为非空,条件不满足时无结果默认为NULL;

mysql> select count(case when score > 90 then 1 end) from student;
+----------------------------------------+
| count(case when score > 90 then 1 end) |
+----------------------------------------+
|                                      3 |
+----------------------------------------+
1 row in set (0.00 sec)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值