目录
一、 GROUP BY 查询
group by 为分组查询。先看一个示例:
pl/sql中查询出oracle数据库的一张表:
查询出学校一年级,一班的男/女生各有多少人,且男/女生的最大年龄是多少。SQL如下
select school,grade,class,sex,count(sex),max(age) from STU where
class='1班' and grade='一年级' group by sex,class,grade,school
分析:分组查询由select, from, where, group by, having, order by 以及聚合函数等组成。
以上分组语句的查询结果为:
聚合函数有: sum(求和)、 count(*)(记录数)、 max(最大值)、 min(最小值)、avg(平均值)。
GROUP BY 后面跟 分类聚合的字段。
HAVING 子句 对分类后的结果再进行筛选。
WHERE 子句 对分类聚合前的数据进行筛选。
注:在SELECT 中查询的字段 必须使用聚合函数 或者 不使用聚合函数而出现在GROUP BY 子句中。而 GROUP BY 子句中出现的字段 不一定要写在 SELECT 语句后。
HAVING 子句的使用:查询男/女分组后count()数大于4的。sql语句如下
select school,grade,class,sex,count(sex),max(age) from STU where
class='1班' and grade='一年级' group by sex,class,grade,school
having count(sex)>4
使用having 子句的查询结果为:
说明:GROUP BY 子句后多个字段的分组,如 group by a,b,c 先对a 属性进行分组,其次对b 属性,最后c 属性。但是,最终分组结果受 group by 子句中 最为 细分 的属性字段影响。