首页 > 资讯列表 > 编程/数据库 >> PHP

oracle组函数avg(),sum(),max(),min(),count()、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化详解

PHP 2014-11-29 05:04:59 转载来源: 网络整理/侵权必删

1组函数 avg(),sum(),max(),min(),count()示例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from emp/ 截图:   2 组函数和null在一起 案例:求员工的平均奖金 错误sql: select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3 from emp; 截图:   错误原因: select count(comm),count(*) from emp;   分析: --组函数自动滤空,组函数忽略空值 --修正函数的滤空 select count(nvl(comm,0)),count(*) fromemp;   3.分组数据 A  求各个部门的平均工资 思路:需要把各个部门的数据划分….

1组函数 avg(),sum(),max(),min(),count()示例:

selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from emp/

截图:

 

2 组函数和null在一起

案例:求员工的平均奖金

错误sql:

select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3

from emp;

截图:

 

错误原因:

select count(comm),count(*) from emp;

 

分析:

--组函数自动滤空,组函数忽略空值

--修正函数的滤空

select count(nvl(comm,0)),count(*) fromemp;

 

3.分组数据

A  求各个部门的平均工资

思路:需要把各个部门的数据划分….10部门 20部门 30部门….分组……

select deptno,avg(sal)

from emp

group by deptno;

运行结果:

 

B  组函数设计的本意

(1)、select检索的列 必须要位于group by后面的集合列中

(2)、组函数设计的本意:必须要在分组数据之上,进行结果集的检索….

注意:group by子句要求:所有在select中出现的列,都必须在出现group by分组子句中。

select a, b, c

from emp

group by a, b, c,d; 这种格式是对的,因为在select后的a、b、c都在groub by后面。

 

select a, b, f

  from emp

  group by a, b, c,d;  这种格式是错的,因为在select后的f不在group中

4 在GROUP BY子句中包含多个列

--按部门  不同的职位 统计平均工资

--先按照部门分组,在按照job分组,如果deptno和job一样,就是同一组,然后求平均工资。

 

--求各个部门的,每一个工种的平均工资

select deptno,job,avg(sal),count(deptno)

from emp

group by deptno,job

order by 1;

截图:

 

5 分组过滤

--查询各个部门的平均工资

--进一步,查询平均工资大于2000的部门

select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

 

6 having和where子句区别

求10号部门的平均工资

方法1:先分组,在过滤

select deptno,avg(sal) from emp group by deptno having deptno=10;

 

方法2:先过滤再分组

select deptno,avg(sal) from emp where deptno = 10 group by deptno;

 

7 关于sql优化

select * from emp;

select deptno, ename, ...,  from emp 把要显示的所有的列都写出来,速度快,,不需要"翻译"

 

select *form emp where (deptno = 10) and (deptno = 20) and (deptno=30)

 

<---------

oracle解析逻辑表达式 的方向....从右向左


标签: 函数 分组 oracle avg sum max min count 多行


声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!

站长搜索

http://www.adminso.com

Copyright @ 2007~2024 All Rights Reserved.

Powered By 站长搜索

打开手机扫描上面的二维码打开手机版


使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

站长搜索目录系统技术支持