MySQL中提供了5个统计函数来磅值用户统计数据,可以使用户很方便的对记录进行统计计数,计算和,计算平均数,计算最大值和最小值,而不需要查询所有数据。
在具体使用统计函数时,都是针对表中所有记录或指定特定条件(WHERE语句)的数据记录进行统计计算。在显示应用中,经常会先把所有数据记录进行分组,再对这些分组后的数据记录进行统计计算。
MySQL通过SQL语句GROUP BY来实现,分组数据查询语法如下:
SELECT function()[field] FROM tablenaem WHERE CONDITION GROUP BY field;
在上述语句中,参数field表示字段名,通过该字段对名称为tablename的表的数据记录进行分组。
注意:在具体进行分组查询时,分组所依据的字段上的值一定要具有重复值,否则分组没有任何意义。
统计数量
COUNT(*):该种方式可以实现对表中记录进行统计,不管表字段中包含的是NULL值还是非NULL值。
COUNT(field):该种方式可以实现对指定字段的记录进行统计,在具体统计时将忽略NULL值。
下面我们来看看这两个函数具体的代码示例:
mysql> create table class(id int,name varchar(64),score tinyint unsigned); #创建表
mysql> insert into class values(1,'Mr.Wang',89),(2,'Mr.Zhang',77),(1,'Mr.Li',65),(2,'Mr.Shi',71),(2,'Mr.Ji',NULL); #插入多列数据
mysql> select*from class; #显示所有数据
mysql> select id,count(score) from class group by id; #利用count函数显示出现的次数
mysql> select id,count(*) from class group by id; #做对比
从表中可以发现id为1的数据有2条,id为2的数据有3条(其中一条有NULL值),使用count(score)就不会算NULL值那条记录因此当id为2时有2条数据,使用count(*)则会记录NULL值那条记录因此当id为2时会变成3条数据。
统计计算平均值
该函数只有一种方式
AVG(field)使用方式:该种方式可以实现对指定字段的平均值进行计算,在具体统计时将忽略NULL值。
下面我们来看看这个函数具体的代码示例:
mysql> create table class1(id int,name varchar(64),score tinyint unsigned); #创建表
mysql> insert into class1 values(1,'Mr.Wang',89),(2,'Mr.Zhang',77),(1,'Mr.Li',65),(2,'Mr.Shi',71),(2,'Mr.Ji',NULL); #插入多列数据
mysql> select*from class1; #显示所有数据
mysql> select id,avg(score) from class1 group by id; #利用avg函数显示平均数
这是求平均数的函数,则发现用这个函数会忽略NULL这条数据,
统计计算求和
该函数只有一种使用方式
SUM(field)使用方式:该种方式可以实现计算指定字段之和,在具体统计时将忽略NULL值。
下面我们来看看这个函数具体的代码示例:
mysql> create table class2(id int,name varchar(64),score tinyint unsigned); #创建表
mysql> insert into class2 values(1,'Mr.Wang',89),(2,'Mr.Zhang',77),(1,'Mr.Li',65),(2,'Mr.Shi',71),(2,'Mr.Ji',NULL); #插入多列数据
mysql> select*from class2; #显示所有数据
mysql> select id,sum(score) from class2 group by id; #利用sum函数求和
mysql> select id,sum(score),name from class2 group by id;
mysql> select id,sum(score),group_concat(name) from class2 group by id;
但如果还想显示id为1和2的姓名(name字段)分别是谁该怎么办呢,只加个name字段就可以了吗
这样显然是不行的,那到底该怎么办呢我们可以通过函数GROUP_CONCAT()来实现。该函数可以实现显示每个分组中的指定字段,函数的具体语法形式如下:
SELECT GROUP_CONCAT(field)
FROM tablename
WHERE CONDITION GROUP BY field;
示例:
我们只需加上这个函数就可以显示全了。
统计最大值
该函数只有一种使用方式
MAX(field)使用方式:该种方式可以实现计算指定字段值中的最大值,在具体统计时将忽略NULL值。
代码示例:
mysql> create table class3(id int,name varchar(64),score tinyint unsigned); #创建表
mysql> insert into class3 values(1,'Mr.Wang',89),(2,'Mr.Zhang',77),(1,'Mr.Li',65),(2,'Mr.Shi',71),(2,'Mr.Ji',NULL); #插入多列数据
mysql> select*from class3; #显示所有数据
mysql> select id,max(score) from class3 group by id; #利用max函数求最大值
这里max函数用来求出id分别为1和2时score的最大值。
统计最小值
该函数只有一种使用方式
MAX(field)使用方式:该种方式可以实现计算指定字段值中的最小值,在具体统计时将忽略NULL值。
代码示例:
mysql> create table class4(id int,name varchar(64),score tinyint unsigned); #创建表
mysql> insert into class4 values(1,'Mr.Wang',89),(2,'Mr.Zhang',77),(1,'Mr.Li',65),(2,'Mr.Shi',71),(2,'Mr.Ji',NULL); #插入多列数据
mysql> select*from class4; #显示所有数据
mysql> select id,min(score) from class4 group by id; #利用min函数求出最小值
这里min函数用来求出id分别为1和2时score的最小值