Oracle中的聚合函数-阿里云开发者社区

开发者社区> fjie> 正文

Oracle中的聚合函数

简介: 聚合函数对一组行中的某个列执行计算执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 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)) from emp;

Group by子句

Group By语句从英文的字面意义上理解就是根据(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 emp group by deptno;

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

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

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

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

非法使用组函数

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

举例:

SQL> select empno,count(job) from emp;

正确写法如下:

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

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

SQL> 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 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 by deptno having count(*)>5;

备注:分组函数可以嵌套

嵌套函数

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

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

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

SELECTcolumn, group_function(column)

FROMtable

[WHEREcondition]

[GROUP BYgroup_by_expression]

[HAVINGgroup_condition]

[ORDER BYcolumn];

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
4056 0
Oracle常用函数
分享下Oracle数据库的常用函数 一、字符函数 字符函数是oracle中最常用的函数,我们来看看有哪些字符函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char, m, n):截取字符串的子串,n代表取n个字符的意思,不是代表取到第n个 replace(char1, search_string, replace_string) instr(C1,C2,I,J) -->判断某字符或字符串是否存在,存在返回出现的位置的索引,否则返回小于1;在一个字符串中搜索指
10 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4425 0
+关注
fjie
计算机学生,研究方向为数据挖掘与机器学习,现阶段主要兴趣为深度学习方法在图/网络等非常规(non Euclidean domain)数据中的应用。Github pages: flycser.github.io,Email: hfut_jf@aliyun.com
68
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载