MySQL数据库-数据查询-简单查询-分组查询

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的最小值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长天一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值