Group By 子句将查询结果表按某一列或多列值分组,值相等的为一组。分组的目的是为了细化集函数的作用对象,分组后集函数将作用于每一个组,即每一组都有一个函数值。
例30 求各个课程号及相应的选课人数
select cno, count(sno) '分组人数'
from sc
group by cno
具有相同cno值的元组为一组,然后对每一组作用集函数count计算,以求得该组的学生人数,查询结果如下:
如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以用HAVING短语指定筛选条件。
例31 查询选修了3门以上课程的学生学号
select sno
from sc
group by sno
having count(*)>3
where子句与having短语的区别:在于作用对象不同。where子句作用于基本表或视图,从中选择满足条件的元组。having短语作用于组,从中选择满足条件的组。