国开《数据库基础与应用》第四章 4-5-3:GROUP BY选项
4-5-3:GROUP BY选项
GROUP BY选项的语法格式如下:
GROUP BY <分组列名1> [, <分组列名2> ...]
例1:从学生表中查询出每个专业的学生数
分析:要使用“group by专业”选项,按照不同专业进行分组,在select选项中,要显示出不同专业的学生数,所以要使用列函数count(专业)和对应的专业列名。
select 专业 as 专业名,count(专业) as 学生数
from 学生
group by 专业
查询结果如下:
专业名 | 学生数 |
---|---|
电子 | 2 |
机械 | 1 |
计算机 | 1 |
通信 | 1 |
例2:从教学库中查询出每个学生的学生号、姓名及所选课程的门数。
分析:此查询需要涉及到两个表:学生表和选课表,将它们等值连接后,再按照表中的学生号和姓名进行分组统计,即可得到所需要的结果。
select x.学生号,姓名,count(*) as 选课门数
from 学生 as x inner join 选课 as y on x.学生号=y.学生号
group by x.学生号, 姓名
在这条查询语句中,分别给学生表和选课表起用了别名为x和y。等值连接条件也在from选项中同时给出。
学生号 | 姓名 | 选课门数 |
---|---|---|
0101001 | 王明 | 2 |
0102005 | 刘芹 | 1 |
0202003 | 张鲁 | 4 |
0303001 | 赵红 | 1 |
此结果包含3列数据,分别给出了每个学生的学生号、姓名和选课门数。
例3:从教学库中查询出每个学生的学生号、姓名及所选课程的最好成绩。
分析:只需要把求个数的count(*)函数替换为求成绩最大值的max(成绩)函数即可。
select x.学生号,姓名,max(成绩) as 最好成绩
from 学生 as x inner join 选课 as y on x.学生号=y.学生号
group by x.学生号, 姓名
查询结果为:
学生号 | 姓名 | 最好成绩 |
---|---|---|
0101001 | 王明 | 78 |
0102005 | 刘芹 | 73 |
0202003 | 张鲁 | 96 |
0303001 | 赵红 | 76 |