目录
分组查询
格式
Select 列名 From 表名 [Group By 分组表达式 [having 过滤条件]]
凡是在Select语句后面出现的列,必须包含在聚合函数或者Group By 子句中
举例
Select avg(成绩) as 平均成绩,所在系 From table1 Group by 所在系
Eg:查询男女员工的平均工资
Select avg(工资) as 平均工资,性别 From 工资表 Group by 性别
难点
-
聚合不应出现在Where子句中,除非该聚合位于Having子句或者选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。 例如:
错误写法:Where avg(成绩)>80
正确写法:Having avg(成绩)>80
作业
1、查看XSCJ数据库中XS学生基本情况表、KC课程表、XS_KC成绩表的数据信息。(确保数据和教材第105-106页表5-13学生基本情况表、表5-14课程表、表5-15成绩表中数据一致。)
2、完成教材第107页以下操作:
(1)将XS表中各专业名输出。
Select 专业名 from xs Group by 专业名;
(2)求XS表中各专业的学生数。
select 专业名,count(学号) as 学生数 from xs Group By 专业名;
(3)求被选修的各门课程的平均成绩和选修该课程的人数。
Select 课程名 , count(学号) as 人数 , avg(成绩) as 平均成绩 from xs_kc join kc on xs_kc.课程号=kc.课程号 Group By 课程名;
(4)统计每个专业的男生(1)人数。
Select 专业名,count(学号) AS 人数 from xs where 性别=1 Group By 专业名;
(5)查找平均成绩在75分以上的学生的学号和平均成绩。(参照教材第99页例5.42)
Select 学号,avg(成绩) AS 平均成绩 from xs_kc Group By 学号 Having avg(成绩) >= 75;
(6)查找选修课程超过2门且成绩都在75分以上的学生的学号。(参照教材第99页例5.43)
Select 学号 from xs_kc where 成绩>=75 Group By 学号 Having count(课程号)>2;