SQL查询:[4]分组查询
在实际应用中,我们经常需要做一些数据统计,将表的全部数据划分为几组数据,每组数据统计出一个结果。这种功能可以使用分组函数(多行函数、集合函数)来实现。 在Oracle数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果。主要有COUNT/AVG/SUM/MAX/MIN等几个分组函数。
工具/原料
已安装有Oracle数据库11g
已安装有Oracle SQL Developer
分组函数的使用
1、COUNT: COUNT函数用来计算表中的总记录条数。如下图获取职员表中的职员人数:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/0d2fe5f202b375d76f46fd47515872dadf49d890.jpg)
2、AVG、SUM: AVG、SUM这两个函数用来统计列或表达式的平均值和和值。如下所示:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/df087f0f8b56ad04d055515adae10ef85956d090.jpg)
3、MAX、MIN: 这两个函数用来获取列或表达式的最大值、最小值,可以用来统计任何数据类型。如下图:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/50a010f85856d53dac1a9e5a47d2bb665059ca90.jpg)
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、单列分组: 即分组的依据是一个列,如下图:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/84010e2a04e23ea2377ce6c92b10bc33ed38c390.jpg)
3、多列分组: 即分组的依据是多个列,如下图:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/0d55dc7bd2828689b878f10265f97fbd4d7c3791.jpg)
4、GROUP BY子句中的ROLLUP操作符: 使用ROLLUP操作符可以先按照预定的字段分组,再计算分组计算结果后每行的小计,相当于对于每行数据又执行了一次组函数操作。小计的原则是根据所用分组函数,具体实现如下图:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/b6f0f0f97fbd4c7c2a8d7af2b8bad341027d3091.jpg)
5、GROUP BY子句中的CUBE操作符:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/32fbcd41037de137ed48640ff6c5cf672a5f2a91.jpg)
6、使用HAVING子句限制分组结果: HAVING子句用来对分组后的结果进一步限制。如下图将平均薪水不小于3000才被显示出来:
![SQL查询:[4]分组查询](https://exp-picture.cdn.bcebos.com/ce26355fd5460596932ab2633e03c8d247fe2591.jpg)