数据库中count的用法

  • 格式:docx
  • 大小:18.13 KB
  • 文档页数:3

数据库中count的用法
数据库中count的用法的用法如下:count函数是用来统计表中或
数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与
性能比较吧。
count(*) 它返回检索行的数目, 不论其是否包含 NULL值。
SELECT 从一个表中检索,而不检索其它的列,并且没有 WHERE
子句时, COUNT(*)被优化到最快的返回速度。
例如:SELECT COUNT(*) FROM student;COUNT(DISTINCT 字段),返
回不同的非NULL值数目;若找不到匹配的项,则COUNT(DISTINCT)返
回 0 。
这个优化仅适用于 MyISAM表, 原因是这些表类型会储存一个函
数返回记录的精确数量,而且非常容易访问。
对于事务型的存储引擎(InnoDB, BDB), 存储一个精确行数的问题
比较多,原因是可能会发生多重事物处理,而每个都可能会对行数产生
影响。
例, 创建用于测试的数据表,以进行count数据统计:CREATE TABLE
`user` (`id` int(5) unsigned NOT NULL AUTO_INCREMENT,`name`
varchar(10) DEFAULT NULL,`password` varchar(10) DEFAULT
NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=4
DEFAULT CHARSET=latin1测试数据为:1 name1 1234562 name2 1234563
name3 1234564 name4 NULL请注意以下查询的返回结果:1,select
count(*) from `user`2,select count(name) from `user`3,select
count(password) from `user`输出结果:4,4,3原因分析:1,count(*)是对
行数目进行计数,所以结果为4。
2,count(column_name)是对列中不为空的行进行计数,所以
count(name)=4,而count(password)=3。
使用GROUP BY对每个owner的所有记录分组,没有它,你会得到
错误消息:mysql> SELECT owner, COUNT(*) FROM pet;ERROR 1140
(42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)with no
GROUP columns is illegal if there is no GROUP BY clauseCOUNT( )和
GROUP BY以各种方式分类你的数据。
下列例子显示出进行动物普查操作的不同方式。
每种动物的数量:mysql> SELECT species, COUNT(*) FROM pet
GROUP BY species;+---------+----------+| species | COUNT(*)
|+---------+----------+| bird | 2 || cat | 2 || dog | 3 ||
hamster | 1 || snake | 1 |+---------+----------+每种性别的动物数
量:mysql> SELECT sex, COUNT(*) FROM pet GROUP BY
sex;+------+----------+| sex | COUNT(*) |+------+----------+| NULL | 1 || f
| 4 || m | 4 |+------+----------+(在这个输 出中,NULL表示“未
知性别。
)按种类和性别组合的动物数量:mysql> SELECT species, sex,
COUNT(*) FROM pet GROUP BY species, sex;+---------+------+----------+|
species | sex | COUNT(*) |+---------+------+----------+| bird | NULL | 1
|| bird | f | 1 |
例如, 前面的查询,当只对狗和猫进行时,应为:mysql> SELECT
species, sex, COUNT(*) FROM pet-> WHERE species = 'dog' OR species =
'cat'-> GROUP BY species, sex;+---------+------+----------+| species | sex |
COUNT(*) |+---------+------+----------+| cat | f | 1 || cat | m |
1 || dog | f | 1 || dog | m | 2 |+---------+------+----------+或,
如果你仅需要知道已知性别的按性别的动物数目:mysql> SELECT
species, sex, COUNT(*) FROM pet-> WHERE sex IS NOT NULL-> GROUP BY
species, sex;+---------+------+----------+| species | sex | COUNT(*)
|+---------+------+----------+| bird | f | 1 || cat | f | 1 || cat
| m | 1 || dog | f | 1 |