加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

聚合函数

发布时间:2020-12-14 05:39:47 所属栏目:百科 来源:网络整理
导读:?聚合函数 ??? ??? 聚合函数对一组行中的某个列执行计算执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,所以有的时候也把其称之为分组函数。 分组函数的介绍 分组函数作用于一组数据,并对一组数据返回一个

?聚合函数

???

??? 聚合函数对一组行中的某个列执行计算执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,所以有的时候也把其称之为分组函数。

分组函数的介绍

分组函数作用于一组数据,并对一组数据返回一个值.

常见的分组函数有:

? ? ? ? ? ? ? ? ? ? ? ?
?

函数名称

?
?

函数描述

?
?

Count

?
?

返回找到的记录数

?
?

Min

?
?

返回一个数字列或计算列的最小值

?
?

Max

?
?

返回一个数字列或计算列的最大值

?
?

Sum

?
?

返回一个数字列或计算列总和

?
?

avg

?
?

返回一个数字列或计算列的平均值

?

分组函数的语法:

SELECT???? [column,] group_function(column),...

FROM??????????????? table

[WHERE?? condition]

[GROUP BY????? column]

[ORDER BY?????? column];

//返回总记录数?? //* 代表的是:一条记录

SQL> select count(*) from emp;

//返回comm不为空的总记录数

SQL> select count(comm) from emp;

//COUNT(DISTINCT expr) 返回 expr非空且不重复的记录总数

SQL> select count(distinct(sal)) from emp;

注意:组函数忽略空值

//返回所有员工的平均工资??

SQL> select avg(nvl(sal,0)) from emp;

注意:NVL函数使分组函数无法忽略空值

//返回员工编号最小值??

SQL> select min(empno) from emp;

//返回员工工资最大值

SQL> select max(sal) from emp;

//求该月本公司发出的工资总额

SQL> select sum(comm)+sum(sal) from emp;

SQL> select sum(nvl(sal,0)+nvl(comm,0)) fromemp;

?

Group by子句

GroupBy语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。

?

注意:group by子句一定要与分组函数结合使用,否则没有意义。

//求出每个部门的员工人数

SQL> select deptno,count(*) as "人数" from emp group by deptno;

//求出每个部门的员工的平均工资

SQL> select deptno,avg(nvl(sal,0)) from empgroup by deptno;

//注意:group by 子句中的列不必包含在SELECT 列表中

SQL> select avg(nvl(sal,0)) from emp group bydeptno;

?

//求出某个部门中相同职位的员工人数?? group by 后可以跟多个分组的字段

SQL> select deptno,job,count(*) from emp groupby deptno,job order by deptno;

?

非法使用组函数

1、?????????????所用包含于SELECT 列表中,而未包含于组函数中的列都必须包含于GROUP BY 子句中。

举例:

SQL> selectempno,count(job) from emp;

正确写法如下:

SQL> selectempno,count(job) from emp group by empno;

2、?????????????不能在WHERE 子句中使用组函数(注意)。

SQL> selectdeptno 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???? column,group_function

FROM??????????????? table

[WHERE?? condition]

[GROUP BY????? group_by_expression]

[HAVING? group_condition]

[ORDER BY?????? column];

//查询部门的员工人数大于五部门编号

SQL> select deptno,count(*) from emp group bydeptno having count(*)>5;

?

备注:分组函数可以嵌套

?

嵌套函数

  函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则.

 嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中

总结:整个查询语句的语法格式如下:

SELECT???? column,group_function(column)

FROM??????????????? table

[WHERE?? condition]

[GROUP BY????? group_by_expression]

[HAVING? group_condition]

[ORDER BY?????? column];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读