Oracle学习(4)---数据定义语言---分组查询
发布时间:2020-12-12 15:47:13 所属栏目:百科 来源:网络整理
导读:分组查询 源码项目地址 在Oracle数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果。主要包括COUNT,AVG,SUM,MAX,MIN等几个分组函数。 分组函数的使用 COUNT COUNT函数用来计算表中的总记录条数。 --例1: 分组函
分组查询源码项目地址 > 在Oracle数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果。主要包括COUNT,AVG,SUM,MAX,MIN等几个分组函数。
> 加入到GROUP BY和HAVING 子句后的SELECT 语句语法格式如下: SELECT <*,column [alias],...> FROM table [WHERE condition(s)] GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column [ASC | DESC]]; 1. ### 单列分组 > 所谓单列分组就是分组的依据是一个列 --例4: 单列分组 --按部门分组,计算每个部门的平均薪水、薪水总和、最高、最低 --薪水以及该部门下的员工人数 SELECT DEPTNO,AVG(SAL) AVG_SAL,SUM(SAL) SUM_SAL FROM SCOTT.EMP GROUP BY DEPTNO; SELECT DEPTNO,MAX(SAL) MAX_SAL,MIN(SAL) MIN_SAL,COUNT(*) COUNT_NUM FROM SCOTT.EMP GROUP BY DEPTNO; 结果为: 2. ### 多列分组 > 所谓多列分组就是分组的依据是多个列 --例5: 多列分组 --计算每个部门每个职位的平均薪水和最高薪水 SELECT DEPTNO,JOB,MAX(SAL) MAX_SAL FROM SCOTT.EMP GROUP BY DEPTNO,JOB; 结果为:  3. ### GROUP BY 语句中的 ROLLUP 操作符 > 使用ROLLUP操作符可以先按照预定的字段分组,再计算分组计算后每行的小计,相当于对于每行数据又执行了一次组函数的操作。 --例6: GROUP BY 语句中的 ROLLUP 操作符 SELECT DEPTNO,AVG(SAL) AVG_SAL FROM SCOTT.EMP GROUP BY ROLLUP (DEPTNO,JOB); 结果为:  4. ### GROUP BY 语句中的 CUBE 操作符 > 和 ROLLUP 操作符类似,CUBE 操作符也是为了计算分组后的小计结果,除了可以像 ROLLUP 一样横向小计外,还可以生成纵向小计。小计的原则任然 是根据所用的分组函数。 --例7: GROUP BY 语句中的 CUBE 操作符 SELECT DEPTNO,AVG(SAL) AVG_SAL FROM SCOTT.EMP GROUP BY CUBE (DEPTNO,JOB); 结果为:   5. ### 使用 HAVING 子句限制分组结果 > HAVING 子句用来对分组后的结果进一步限制,比如按部门分组后,得到每个部门的 最高薪水,只有最高薪水大于4000的记录才能被输出显示 --例8: 使用 HAVING 子句限制分组结果 SELECT DEPTNO,MAX(SAL) MAX_SAL FROM SCOTT.EMP GROUP BY DEPTNO HAVING MAX(SAL) > 4000; 结果为:  6. ### 使用分组函数的注意事项 * **首先分组函数只能出现在 SELECT 列表、 HAVING 子句和 ORDER BY 子句中,尤其注意不能出现在 WHERE 子句中。如果要限制分组结果,只能使用 HAVING 子句** * **另外,分组函数是忽略NULL值的** (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |