首页 > 代码库 > 分组聚合

分组聚合

聚合函数经常与 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];

分组聚合