oracle中的分组聚合
聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,所以有的时候也把其称之为分组函数。
在下面的介绍过程中我们还重点讲解了group by having等知识点,希望你所有收获!
group by 后可以跟多个分组的字段
select deptno,job,count(*) from emp group by deptno,job order by deptno;
非法使用组函数
1.select 后面只能跟两种数据1.聚合函数2.分组条件
1、 所用包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中。
举例:select empno,count(job) from emp;
正确写法如下: select empno,count(job) from emp group by empno;
// group by 后可以跟多个分组的字段
select sid,cid,max(score)........group by sid
select sid,cid,max(score).........group by sid,cid
2、 不能在 WHERE 子句中使用组函数(注意)。
select deptno from emp where count(job)>0 group by deptno;
备注:ORA-00934: 此处不允许使用分组函数 Having 子句 HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。
WHERE 子句搜索条件在进行分组操作之前应用;
而 HAVING 搜索条件在进行分组操作之后应用。
HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。
HAVING 子句可以引用选择列表中出现的任意项。
备注:having子句通常与group by子句结合使用
查询部门的员工人数大于五的部门编号
select deptno,count(*) from emp group by deptno having count(*)>5;
//求出某个部门中相同职位的员工人数 group by 后可以跟多个分组的字段
select deptno,job,count(*) from emp group by deptno,job order by deptno;
Having 在则group必须在
group by在having未必在
备注:分组函数可以嵌套
嵌套函数
函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则.
嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中
总结:整个查询语句的语法格式如下:
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];