Oracle分组查询

摘要:
2). 在分组函数中使用NVL函数–NVL函数可以强制分组函数包含具有空值的记录3)当存在空数据和空数据时,可以组合单行函数来使用,例如:计算员工的平均奖金。如果没有奖金,它将被视为0 selectcount(*),count,avg,avgfromemp--补充注释1)当最小和最大计数字符类型时,它们将根据字符序列计数最小和最大。如果值为空,则MIN和MAX可以用于任何数据类型。例如,查询最早和最晚的雇用日期。MIN是最早的日期,MAX是最晚的日期。2). SUM和AVG函数只能对数值类型的列或表达式进行操作。

分组查询


分组函数 :group by 要分组的列名 对数据集合处理的函数,可以处理多行数据
--5个分组函数
--count --计数函数,用于数量的统计
--sum 求和函数,对数据进行求和
--avg 求评平均,对一组数据求平均值
--min ,求最小值
--max ,求最大值
--分组函数,也叫统计函数,一般也做数据统计使用

例子:
--查询出10部门的最高工资和最低工资,平均工资;
select max(sal) ,min(sal) ,avg(sal) from emp where deptno=10;
--查询出入职日期在1981年6月后的员工数量,及平均工资
select count(*) ,avg(sal) from emp where to_char(hiredate,'yyyy-mm') >= '1981-06';
select count(*),avg(sal) from emp where hiredate>=to_date('1981-06','yyyy-mm');
--查询出公司每月的工资支出是多少
select sum(sal) from emp;
--公司员工普提工资上调50%,查询公司上调工资前后,每月工资支出
select sum(sal),sum(sal+(sal*0.5)) from emp;

1. select 语句的执行顺序:
from -> where -> group by -> having -> select - order by
– 1.通过FROM子句中找到需要查询的表;
– 2.通过WHERE子句进行非分组函数筛选判断;
– 3.通过GROUP BY子句完成分组操作;
– 4.通过HAVING子句完成组函数筛选判断;
– 5.通过SELECT子句选择显示的列或表达式及组函数;
– 6.通过ORDER BY子句进行排序操作。
例子:查询出入职日期在1981年2月后的员工信息,并按照部门进行分组,查询出每个部门的平均工资,并且平均工资在2600以上 ,按照平均工资进行倒序排序
select deptno, avg(sal) avgsal
from emp
where hiredate >= to_date('1981-02', 'yyyy-mm')
group by deptno
having avg(sal) > 2500
order by avg(sal) desc;

2. 联合主键
例子:按入职年份和部门进行统计,查询出各部门各入职年份的最高工资和最低工资,多列统计
理解:就是按照入职年份,部门进行分组
select to_char(hiredate,'yyyy'),deptno,max(sal),min(sal) from emp group by to_char(hiredate,'yyyy'),deptno;

3. 主函数中的distinct函数
1)DISTINCT会消除重复记录后再使用组函数
--理解distinct 关键与组函数的组合使用,用于何种场合
例如:统计员工所在的部门的数量
select count(deptno),count(distinct deptno) from emp;
2)遇到有null空值数据时,可以组合单行函数进行使用
例如:统计员工的平均奖金,没有奖金看为0
select count(*),count(comm),avg(comm),avg(nvl(comm,0)) from emp;

分组查询时注意:
1.带group by的分组查询,执行顺序是先分组group by 后查询 select,即,写在select 后面的列,必须是分组列,或 组函数
2.where条件中不能直接使用组函数
3.分组数据可以使用having字句进行过滤
4.分组列可以不在select子句中显示,select 列中要显示的列,必须出现在group by 分组中(在select 子句中非组函数列,都必须添加到group by 中)
5.having 是对group by分组后的数据进行过滤
6.组查询语句可以使用在:select ,having ,order by 。不能直接使用在

4. count统计函数
count(*) 和count(列名)
在count 统计中,不统计值为null的行
阿里巴巴的编码规范:在做行数统计时,要求使用count(*),以获得更高的效率或准确率

5.分组函数中空值处理
1).除了COUNT(*)之外,其它所有分组函数都会忽略列中的空值,然后再进行计算。
2 ). 在分组函数中使用NVL函数
– NVL 函数可以使分组函数强制包含含有空值的记录
3).遇到有null空值数据时,可以组合单行函数进行使用
例如:统计员工的平均奖金,没有奖金看为0
select count(*),count(comm),avg(comm),avg(nvl(comm,0)) from emp;


--补充说明
1). min 和 max 统计字符类型时,会根据字符的先后顺序进行统计
min和max统计时,如果数值为null,则不统计
MIN和MAX可以用于任何数据类型
例如:查询入职日期最早和最晚的日期
MIN(hiredate) 最早日期 , MAX(hiredate) 最晚日期

2). SUM和AVG函数都是只能够对数值类型的列或表达式操作。
例如:查询工资总和,平均工资
SUM(sal),AVG(sal) ,

3).COUNT函数的主要功能是返回满足条件的每组记录条数
COUNT(*):返回表中满足条件的行记录数

4). 组函数中DISTINCT:DISTINCT会消除重复记录后再使用组函数

其他三个函数是具有相同特性
select * from emp;
select min(job),max(job) from emp;
select min(ename),max(ename) from emp;
select min(comm),max(comm) = emp;

免责声明:文章转载自《Oracle分组查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇016.PGSQL-创建分区表、分区表索引线阵相机参数计算,选择合适的相机与镜头下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

godror基于ODPI-C的 oracle golang 驱动使用

godror 是一个很不错的oracle golang 驱动,基于ODPI-C 编写,好处是我们需要需要依赖编译 我们只需要安装oracle client 就可以了,不像go-oci8需要编译,同时目前也有一个纯golang 的 oracle驱动,但是目前还不是很稳定,以下是godror的参考使用 参考代码 package main ​ import (...

获取日期

select 1 --若输出1,则数据库检测正常select GETDATE() --检测当地时间是否准确select 32-Day(getdate()+32-Day(getdate())) --检测电脑时间当前月的总天数select datediff(mm,0,getdate())select dateadd(day,-day(dateadd(mm,1,...

Oracle 11g远程连接 全解 转载

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://huangwei520.blog.51cto.com/1923956/503363 Oracle 版本:11g 运行环境: window XP 远程连接 需要两台电脑,一个是远程服务器端 ;一个是本机客户端。并且要保证在两台电脑上同时安装...

MySQL杂记select 权限范围变更史

前言: 在5.7版本中无意间发现,只有 select 权限的用户,是可以执行 select ... for update / select ... lock in share mode 命令的,一时想不出在什么场景下,会存在只有 select 权限的用户,需要对记录加锁操作, 复现: ---session1: mysql> create databa...

ORACLE WITH AS 用法

With查询语句不是以select开始的,而是以“WITH”关键字开头    可认为在真正进行查询之前预先构造了一个临时表,之后便可多次使用它做进一步的分析和处理 WITH Clause方法的优点     增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标。   ...

处理百万级以上的数据提高查询速度的方法

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而...