一、GROUP BY子句位置
SELECT 【ALL|DISTINCT】<目标列表达式1>【,<目标列表达式2>,...】
FROM <表名或视图名1>【,<表名或视图名2>,...】
【WHERE <元组选择条件表达式>】
【GROUP BY <属性列名1>【,<属性列2>,...】【HAVING <组选择条件表达式>】】
【ORDER BY <目标列名1>【ASC|DESC】【,<目标列名2>【ASC|DESC】,...】】
二、GROUP BY子句格式
【GROUP BY <属性列名1>【,<属性列2>,...】【HAVING <组选择条件表达式>】】
1、依次按属性列名1,属性列名2,...的值进行分组,属性列的值都相同的元组作为一个分组
2、HAVING子句会对分组进行筛选
3、聚集函数将以每个分组为单位作为计算对象
三、GROUP BY子句使用案例
1、例1:查询选修了课程的学生学号和平均成绩
select sNo,平均成绩=avg(grade)
from sC
group by sNo
2、例2:查询平均成绩在96分以上的学生学号和平均成绩
select sNo,平均成绩=avg(grade)
from sC
group by sNo having avg(grade)>96
注意!!!!!在SELECT子句显示除聚集属性以外的属性和在HAVING子句中使用到的除聚集属性以外的属性必须是出现在GROUP BY子句中的属性
3、例3:查询男生人数超过2名的院系的名称
select sD
from s
where sex='男'
group by sD having count(*)>2
四、SELECT子句、WHERE子句、GROUP BY子句和HAVING短语的作用对象和执行顺序
1、WHERE子句对FROM子句中所指明的数据对象(表/视图)筛选出符合条件的元组
2、GOUP BY子句对WHERE子句筛选好的元组进行分组,产生初始分组
3、HAVING短语对GROUP BY子句产生的初始分组进行筛选,产生最终分组
4、SELECT子句对HAVING短语产生的最终分组产生查询结果,即结果表