1. GROUP BY 子句
在WHERE子句后面加上GROUP BY子句可以对元组进行分组,保留字GROUP BY后面
踉着一个分组属性列表。最简单的情况是FROM子句后面只有一个关系,根据分组属性对它的
元组进行分组。SELECT子句中使用的聚集操作符仅用在每个分组上。
【例8.11】学生数据库中的SC关系,查询每个学生的平均成绩。
SELECT Sno,AVG (Grade) FROM SC GROUP BY Sno
该语句是将SC关系的元组重新组织,并进行分组使得不同学号的元组分别被组织在一起,
最后求出各个学生的平均值输出。
2. HAVING 子句
假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,可以在GROUP BY子句后面跟一个HAVING子句即可。
注意:当元组含有空值时,应该记住以下两点。
(1) 空值在任何聚集操作中被忽视。它对求和、求平均值和计数都没有影响。它也不能是
某列的最大值或最小值。例加,COUNT (*)是某个关系中所有元组数目之和,但COUNT (A)
却是A属性非空的元组个数之和。
(2) NULL值又可以在分组属性中看作是一个一般的值。例如,SELECT A ,AVG(B) FORM
R中,当A的属性值为空时,就会统计A=NULL的所有元组中B的均值。