mysql>select s.name 姓名,sum(grade) 总成绩 from score c innerjoin student s on c.stu_id=s.id groupby s.name;+-----------+-----------+| 姓名 | 总成绩 |+-----------+-----------+| 张三 |95|| 张老二 |153|| 张老大 |178|| 李四 |162|| 王五 |94|| 王六 |175|+-----------+-----------+6rowsinset(0.00 sec)#“sum(grade)”关键字表示求“grade”的和#“group by s.name”表示按姓名进行聚合运算
11. 计算每个考试科目的平均成绩
mysql>select c.c_name 考试科目,avg(grade) 平均成绩 from score c innerjoin student s on c.stu_id=s.id groupby c.c_name;+--------------+--------------+| 考试科目 | 平均成绩 |+--------------+--------------+| 中文 |91.5000|| 英语 |87.7500|| 计算机 |80.7500|+--------------+--------------+3rowsinset(0.00 sec)#“sum(grade)”关键字表示求“grade”的平均值#“group by c.c_name”表示按考试科目进行聚合运算
12. 查询计算机成绩低于95的学生信息
mysql>select s.*from score c innerjoin student s on c.stu_id=s.id where c.c_naame='计算机'and c.grade<95;+-----+-----------+------+-------+--------------+--------------------+| id | name | sex | birth | department | address |+-----+-----------+------+-------+--------------+--------------------+|902| 张老二 | 男 |1986| 中文系 | 北京市昌平区 ||904| 李四 | 男 |1990| 英语系 | 辽宁省阜新市 ||906| 王六 | 男 |1988| 计算机系 | 湖南省衡阳市 |+-----+-----------+------+-------+--------------+--------------------+3rowsinset(0.00 sec)
13. 查询同时参加计算机和英语考试的学生的信息
#方法一(推荐使用,效率高且运行相对查询较快):
mysql>select s.*from student s,(select*from score where c_name ='计算机')as st1 innerJOIN(select*from score where c_name ='英语')as st2 on st1.stu_id = st2.stu_id where s.id=st1.stu_id;+-----+-----------+------+-------+--------------+--------------------+| id | name | sex | birth | department | address |+-----+-----------+------+-------+--------------+--------------------+|901| 张老大 | 男 |1985| 计算机系 | 北京市海淀区 ||904| 李四 | 男 |1990| 英语系 | 辽宁省阜新市 ||906| 王六 | 男 |1988| 计算机系 | 湖南省衡阳市 |+-----+-----------+------+-------+--------------+--------------------+3rowsinset(0.00 sec)#将“score”作为多表查询的两者(自己连自己),从而进行两次筛选,最终筛出结果#最后通过对学号的匹配查询出同时参加计算机和英语考试的学生的信息#方法二(不推荐,步骤繁琐,效率低且相对查询较慢):/*先利用“group_concat”将计算机和英语统计为一行显示*/
mysql>select stu_id,group_concat(c_name) 学科 from score groupby stu_id;+--------+------------------+| stu_id | 学科 |+--------+------------------+|901| 计算机,英语 ||902| 计算机,中文 ||903| 中文 ||904| 计算机,英语 ||905| 英语 ||906| 计算机,英语 |+--------+------------------+6rowsinset(0.00 sec)/*再利用“having”筛选出同时参加计算机和英语考试的学生id*/
mysql>select stu_id,group_concat(c_name) 学科 from score groupby stu_id having学科='计算机,英语';+--------+------------------+| stu_id | 学科 |+--------+------------------+|901| 计算机,英语 ||904| 计算机,英语 ||906| 计算机,英语 |+--------+------------------+3rowsinset(0.00 sec)/*最后利用多表查询查询出同时参加计算机和英语考试的学生信息*/
mysql>select s.*from student s,(select stu_id,group_concat(c_name) 学科 from score groupby stu_id having 学科='计算机,英语')x where x.stu_id=s.id;+-----+-----------+------+-------+--------------+--------------------+| id | name | sex | birth | department | address |+-----+-----------+------+-------+--------------+--------------------+|901| 张老大 | 男 |1985| 计算机系 | 北京市海淀区 ||904| 李四 | 男 |1990| 英语系 | 辽宁省阜新市 ||906| 王六 | 男 |1988| 计算机系 | 湖南省衡阳市 |+-----+-----------+------+-------+--------------+--------------------+3rowsinset(0.00 sec)#“(select stu_id,group_concat(c_name) 学科 from score group by stu_id having 学科='计算机,英语')x”表示将之前筛选出的结果作为一张新的表,再给这张新的表设置别名“x”
14. 将计算机考试成绩按从高到低进行排序
mysql>select grade 考试成绩 from score where c_name='计算机'orderby grade desc;;+--------------+| 考试成绩 |+--------------+|98||90||70||65|+--------------+4rowsinset(0.00 sec)#查询语句末尾加了“order by grade asc”表示以科目成绩进行降序显示