MySQL中的count()函数

1、count()有两大作用:

     1.1、统计某个列值的数量。

     1.2、统计行数。



2、实例

     2.1、统计列值时,要求列值非空的(不统计null)。如果在count()的括号中指定了列或者列的表达式,则统计的是这个表达式有值的结果数。所谓的有值,就是不为null。

建表 users: 

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(7) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `userName` varchar(50) DEFAULT NULL COMMENT '用户名',
  `userAge` int(11) DEFAULT NULL COMMENT '年龄',
  `userAddress` varchar(200) DEFAULT NULL COMMENT '家庭住址',
  `state_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_state_id` (`state_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2016000010 DEFAULT CHARSET=utf8;


插入数据:

BEGIN;
INSERT INTO `users` VALUES ('20001', 'liming1 ', '23', '河北承德', '2'), ('20002', ' 1liming', '23', '河北承德', '3'), ('2016000001', 'liqing', '20', '河北省石家庄市', '4'), ('2016000002', 'limin', '21', '河北省承德市', '1'), ('2016000003', ' str0', null, null, '4'), ('2016000009', 'rrrr ', '23', '而非', '5');
COMMIT;


查询sql:

select count(*) from users;  -- 数据行总数为6
select count(users.username) from users ;  -- 数据行在列username不为null的总数为6
select count(users.userAge) from users;  -- 5,因为有一行数据行在列userAge为null
select count(users.userAge=23) from users; -- 5,说明括号里面为列或者列的表达式是一个作用

      2.2、统计结果集的行数。当MySQL确认括号内的表达式值不可能为空时,实际上就是在统计行数。例子如上第二、三、四个sql语句。



3、统计某个列不同值的数量时,count() 和sum()的不同写法的同等效果。

建表city:

DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
  `city` varchar(10) NOT NULL,
  `id` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据:

BEGIN;
INSERT INTO `city` VALUES ('承德', '2'), ('石家庄', '10'), ('张家口', '20'), ('保定', '3'), ('邢台', '2'), ('兴隆', '5'), ('平泉', '6'), ('双桥', '3'), ('隆化', '7'), ('积水潭', '8'), ('渭水', '4'), ('浏阳', '6'), ('米清', '5'), ('葛岭', '7'), ('西直门', '3'), ('承德', '1'), ('石家庄', '6'), ('张家口', '8'), ('保定', '0'), ('邢台', '4'), ('兴隆', '6'), ('平泉', '5'), ('双桥', '9'), ('隆化', '11'), ('积水潭', '33'), ('渭水', '5'), ('浏阳', '66'), ('米清', '7'), ('葛岭', '5'), ('西直门', '22');
COMMIT;

查询sql:使用count()而不是sum()实现同样的目的,只需要将满足条件的设置为真,不满足条件的设置为null即可。因为count()不会对列值为null的行计数。

select sum(if(city.city='西直门',1,0)) as xizhimen,sum(if(city.city='积水潭',1,0)) as jishuitan  from city; -- 2  2

select count(city.city='西直门' or null) as xizhimen,count(city.city='积水潭' or null) as jishuitan from city; -- 2  2





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值