SQL语言之组函数(Oracle)
组函数(聚合函数)
组函数操作行集,给出每组的结果。组函数不像单行函数,组函数对行的集合进行操作,对每组给出一个结果。这些集合可能是整个表或者是表分成的组;
> 一、组函数与单行函数的区别
单行函数对查询到每个结果集做处理,而组函数只对分组数据做处理;
单行函数对每个结果集返回一个结果,而组函数对每个分组返回一个结果;
> 二、组函数的类型
Avg 平均值
Count 计算
Max 最大值
Min 最小值
Sum 合计
三、组函数的语法
四、使用组函数的原则
用于函数的参数的数据类型可以是char、vachar2、number、date;
所有组函数忽略空值;为了用一个值代替空值,用nvl、nvl2、coalesce函数;
五、组函数的使用
Avg(arg)函数
对分组数据做平均值运算;
Arg:参数类型只能是数字类型;
Sum(arg)函数
对分组数据求和;
Arg:参数类型只能是数字类型;
(以hr用户中的employees为例)
例
求雇员表中的的平均薪水与薪水总额。
Select avg(salary) , sum(salary) from employees;
Min(arg)函数
求分组数据中最小数据;
Arg:参数类型可以是字符,数字,日期;
Max(arg)函数
求分组数据中最小数据;
Arg:参数类型可以是字符,数字,日期;
(以hr用户中的employees为例)
例
求雇员表中的最高薪水与最低薪水;
Select max(salary) , min(salary) from employees;
count函数
返回一个表中的行数;
Count函数有三种格式:count(*)、count(expr)、count(distinct expr);
Count(*)
返回表中满足select语句标准的行数,包括重复行,包括有空值的行。如果 where子句包括在select语句中,count(*)返回满足where子句条件的行数;
(以hr用户中的employees为例)
例
返回查询结果的总条数。
Select count(*) from employees;
Count(expr)
返回在列中的由expr指定的非空值的数;
(以hr用户中的employees为例)
例
显示部门 80 中有佣金的雇员人数;Select count(commission_pct) from employees where department_id = 80;
Count(distinct expr)
使用distinct关键字禁止计算在一列中的重复值;
(以hr用户中的employees为例)
例
显示 EMPLOYEES 表中不重复的部门数;Select count(distinct department_id) from employees;
组函数和null值
所以组函数忽略列中的空值;
在组函数中使用nvl函数来处理空值;
(以hr用户中的employees为例)
例
1.计算所有员工的佣金的平均值;Select avg(commission_pct) from employees;
2.计算有佣金的员工的佣金平均值。
Select avg(nvl(commission_pct,0)) from employees;
创建数据组(group by)
可以根据需要将查询到的结果集信息划分为较小的组,用group by子句实现;
Group by子句语法
group by子句可以把表中的行划分为组;然后可以用组函数返回每一组的摘要信息;
使用分组原则
1.如果在select子句中包含了组函数,就不能选择单独的结果,除非单独的列出现在group by子句中。如果未能在group by子句中包含一个字段列 表,会收到一个错误信息;
2.使用where子句,可以在划分行成组以前过滤行;
3.在group by子句中必须包含列;
4.在group by子句中不能用列别名;
5.默认情况下,行以包含在group by列表中的字段的升序排序。可以用order by子句覆盖这个默认值;
多于一个列的分组
(以hr用户中的employees为例)
例
显示在每个部门中付给每个工作岗位的合计薪水的报告。Select department_id,job_id ,sum(salary) from employees group by department_id , job_id;
Group by子句的执行顺序
先执行数据查询,再对数据进行分组,然后执行组函数;
非法使用group函数的查询
1.在select列表中的任何列必须在group by子句中;
2.在group by子句中的列或表达式不必在select列表中;
修改后可为:(求各部门下的员工数)
Select department_id , count(last_name) from employees group by department_id;
约束分组结果
1.Having子句通常与group by语句联合使用,用来过滤有group by语句返的 记录集;
2.Having语句的存在弥补了where关键字不能与聚合函数联合使用的不足;
3.Having子句语法
(以hr用户中的employees为例)
例
一、显示那些最高薪水大于 $10,000 的部门的部门号和最高薪水。
Select em.department_id,max(em.salary) from employees em group by em.department_id having max(em.salary)>10000;
二、查询那些最高薪水大于 $10,000 的部门的部门号和平均薪水。
Select em.department_id,avg(salary) from employees em group by em.department_id having max(em.salary)>10000;
嵌套组函数
在使用组函数时我们也可以根据需要来做组函数的嵌套使用;
(以hr用户中的employees为例)
例
显示部门中的最大平均薪水;
Select max(avg(salary)) from employees em group by em.department_id;
SQL语言之组函数(Oracle)相关推荐
- SQL语言之索引(Oracle)
索引(index) 在关系型数据库中,索引是一种单独的.物理的对数据库表中的一列或多列的值进行排序的一种存储结构,他是某个表中一列或若干列值的集合和相应的指向表中物理标识,这些值的数据页的逻辑指针清 ...
- SQL语言之序列(Oracle)
序列(sequence) 用户创建的数据库对象,序列会产生唯一的整数.序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的.序列有一个Oracle内部程序产生并增加或减少. 一个节省时 ...
- SQL语言之用户(Oracle)
用户(user) Oracle用户是用来连接数据库和访问数据库对象的: 创建用户 需要具备创建用户的权限可以使用sys或者system用户来创建用户 1.使用默认表空间 例 创建一个用户名称为 u_ ...
- SQL语言之同义词(Oracle)
同义词(synonym) 同义词可以除去对象名必须要的方案限制,并提供一个可替换表名.视图名.序列名和存储过程名或其他对象名.该方法对具有特别长的对象的名字很有用: 创建同义词 例 创建employ ...
- SQL语言之操作数据(Oracle)
操作数据(DML) 当添加.更改或者删除数据库中的数据时需要使用DML语句.DML依据的一个集合构成了一个被称之为事务的逻辑单元: 当完成以下操作是,DML语句被执行: 添加新的行到表中: 修改表 ...
- Oracle PL/SQL语言初级教程(自学)
Oracle PL/SQL语言初级教程 PL/SQL 语言基础 PL/SQL 是一种高性能的基于事务处理的语言,能运行在任何 ORACLE 环境中,支持所有数据处理命令. 通过使用 PL/SQL 程序 ...
- oracle数据库sql培训,Oracle数据库SQL语言实战培训教程(全面、详细、案例、精讲)套餐...
风哥oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 套餐介绍: 风哥Oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 内容: SQL语言基础入 ...
- oracle stdevp函数,ORACLE 系统函数与SQLSERVER系统函数的区别是什么
ORACLE 系统函数与SQLSERVER系统函数的区别是什么 发布时间:2021-03-17 14:40:36 来源:亿速云 阅读:57 作者:Leah 栏目:数据库 这篇文章给大家介绍ORACLE ...
- sql语句中的函数使用
select *,sum(item_XXname) as itemSum from 表名. get(itemSum) 便可得到一系列的对应字段的和. 涉及到的其他的函数还有,摘自以下地址 http:/ ...
最新文章
- C#面向对象三大特性之二:继承
- 云炬Qtpy5开发与实战笔记 2PyCharm添加QTDesinger扩展并创建第一个.ui文件
- [译]Razor内幕之介绍
- Visual Basic.Net连各种数据库的几种方法
- 手机游戏上线前的准备
- php纯真ip调用,使用php调用纯真IP数据库信息的解析组件
- C++——STL容器
- emqx配置ssl/tsl实现双向认证
- 数据文件online和offline
- Winform从入门到精通(38)——StatusStrip(史上最全)
- mysql=mariadb
- Fragment重叠问题简单解决方案
- BZOJ1005 [HNOI2008]明明的烦恼
- 致远SPM解决方案之费用管理
- 会计 金融管理 计算机网络技术,天津海运职业学院专业排名,招生专业目录(10篇)...
- 像阿里一样充满使命愿景和价值观
- python时间间隔函数_python定间隔取点(np.linspace)的实现
- 走进“开源SDR实验室” 一起玩转GNU Radio:gr-qtgui
- 【A星算法的优化方案】
- SEO优化—知己知彼,百战百胜