在实际应用中,我们经常需要做一些数据统计,将表的全部数据划分为几组数据,每组数据统计出一个结果。这种功能可以使用分组函数(多行函数、集合函数)来实现。 在Oracle数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果。主要有COUNT/AVG/SUM/MAX/MIN等几个分组函数。
工具/原料
已安装有Oracle数据库11g
已安装有Oracle SQL Developer
分组函数的使用
1、COUNT: COUNT函数用来计算表中的总记录条数。如下图获取职员表中的职员人数:
2、AVG、SUM: AVG、SUM这两个函数用来统计列或表达式的平均值和和值。如下所示:
3、MAX、MIN: 这两个函数用来获取列或表达式的最大值、最小值,可以用来统计任何数据类型。如下图:
GROUP BY短语及其子句2
1、上面的例子都是以整个数据表作为一个组的,需要把数据表划分为一个一个小组,需要使用GROUP BY子句,把需要进行分组的列放在这个子句后面,如果需要进一步限制分组后的结果,需要使用HAVING子句。使用语法如下: SELECT <*,column [alias],...> FROM table [WHERE condition(s)] [GROUP BY group_by_expression] [HAVING group_condition ] [ORDER BY column[ASC|DESC]];
2、单列分组: 即分组的依据是一个列,如下图:
3、多列分组: 即分组的依据是多个列,如下图:
4、GROUP BY子句中的ROLLUP操作符: 使用ROLLUP操作符可以先按照预定的字段分组,再计算分组计算结果后每行的小计,相当于对于每行数据又执行了一次组函数操作。小计的原则是根据所用分组函数,具体实现如下图:
5、GROUP BY子句中的CUBE操作符:
6、使用HAVING子句限制分组结果: HAVING子句用来对分组后的结果进一步限制。如下图将平均薪水不小于3000才被显示出来: