思维导图:
例如查询grade表中有几条数据:
先看grade表中所有的数据:select * from grade;
select count(*) as total from grade;
总共9条数据,as total是给count(*)取别名;
例如查询grade表中张三的总分:
select stuName,sum(score) from grade where stuName='张三';
例如,查询表中张三的平均分:
select stuName,avg(score) from grade where stuName='张三';
例如,查询表中张三score的最大值
select stuName,max(score) from grade where stuName='张三';
例如,查询表中张三score的最小值
select stuName,min(score) from grade where stuName='张三';
group by 常常与聚合函数一起使用
例如:查询grade表中的记录条数,并按照姓名分组:
select stuName,count(score) from grade group by stuName;
例如:查询表中每个学生的总分:
select stuName,sum(score) from grade group by stuName;
例如:查询表中每个学生的平均分:
select stuName,avg(score) from grade group by stuName;
例如:查询表中每个学生的最高分:
select stuName,max(score) from grade group by stuName;
注意:当没有用分组时,前面可以加上其他属性;
比如:查询表中张三的最高分,并查询出是哪门课程的最高分:
select stuName,course,max(score) from grade where stuName='张三';
这里可以显示出哪门课程的最高分!
再比如:查询表中所有学生的最高分,并查询是哪门课程的最高分,且以名字分组:
select stuName,course,max(score) from grade group by stuName;
显然这是错误的!!!前面我们可以看到李四的最高分是数学95分,王五是英语89分!
因此,在用group by分组时前面是不能加上其他属性的!
例如:之前查询grade表中各位同学的平均分:
select stuName,avg(score) from grade group by stuName;
现在只需要查询avg(score)>84分的结果出来(可以在末尾加上having avg(score)>84);
select stuName,avg(score) from grade group by stuName having avg(score)>84;
可以看到having有筛选结果的作用!
例如先查看表t_student:select * from t_student;
查询每个年级有多少个学生:
select gradeName,count(stuName) from t_student group by gradeName;
现在要求查询出每个年级的所有学生姓名(将count换成group_concat即可):
select gradeName,group_concat(stuName) from t_student group by gradeName;
例如:查询每个年级有多少个学生:
select gradeName,count(stuName) from t_student group by gradeName;
现在要求求出所有年级的总学生数目:
select gradeName,count(stuName) from t_student group by gradeName with rollup;
若是数据类型不是Int型的话,假如是文本型,那么将会将文本都列举出来!
要求列举出所有年级的学生:
select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;