设为首页 收藏本站
查看: 604|回复: 0

[经验分享] oracle分组函数

[复制链接]

尚未签到

发表于 2018-9-9 10:55:17 | 显示全部楼层 |阅读模式
  分组函数:作用于一组值,并对一组数据返回一个值;
  分组函数的使用:
  常用的分组函数:
  Avg(求平均值),sum(求总和),min(求最小值),max(求最大值),count(求总个数),wm_concat(行转列)
  例:select count( distinct deptno) from emp ;
  行转列: select deptno 部门号,wm_concat(ename) 部门中员工的名字  from emp group by deptno;
  ----------------------------------------------------
  分组函数与空值:(分组函数会自动忽略空值)
  1.      统计员工的平均工资
  Select sum(sal)/count(*) 一,sum(sal)/count(sal) 二,avg(sal) 三 from emp;
  2.      统计员工的平均奖金
  Select sum(comm)/count(*)一,  sum(comm)/count(comm) 二,avg(comm) 三from emp;
  注意:nvl函数使分组函数无法忽略空值
  Selectsum(comm)/count(*)一,   sum(comm)/count(nvl(comm,0)) 二from emp;
  Comm为空时,nvl函数返回0,0不为null,所以count不会忽略
  ------------------------------------------------------
  Group by子句的使用
  1.求部门号和部门的平均工资
  Selectdeptno,avg(sal) from emp
  Group bydeptno;
  抽象:
  Selecta,b,c,avg(x) from table
  Group bya,b,c;
  规定:select列表中所有未包含在组函数中的列都应该包含在group by 子句中;
  
  相反的,在group by 中的列,不必包含在组函数中
  
  多个列的分组:(分组逻辑:先按照group by 后面第一个列分组,如果第一个列相同,再按照第二个列分组,如果所有的列都相同,那么这就是同一组中的数据)
  按照部门,不同的职位,统计员工工资的总额
  Select deptno,job ,sum(sal) from emp
  Group by deptno,job;
  
  -------------------------------------------------------
  Having子句的使用:(过滤分组后的数据)
  平均工资大于2000的部门
  Select deptno,avg(sal)
  From emp
  Having  avg(sql)>2000;
  Wherehaving的区别:
  where子句后面不能使用分组函数
  
  Wherehaving可以通用的情况(没有分组函数的情况下可以通用,但是从
  Sql优化的角度上考虑,尽量使用where)
  查询10号部门的平均工资
  1.      Where
  Select deptno,avg(sal) from emp wheredeptno=10 group by deptno
  
  2.      Having
  Select deptno,avg(sal) from empgroup by deptno having deptno=10
  -----------------------------------------------------------------------------
  在分组函数中使用orderby 排序(默认是asc升序)
  1.Select deptno ,avg(sal)
  From emp
  Group by deptno
  Order by avg(sal)
  2.
  Select deptno ,avg(sal)
  From emp
  Group by deptno
  Order by 2—这里的2代表select语句后面的第二列,这里即avg(sal)
  ----------------------------------------------------------------------------
  分组函数的嵌套
  Select  max(avg(sal))
  From emp
  Group by deptno;
  -----------------------------------------------------------------------
  Group by 语句的增强:
  (1)Selext deptno,job,sum(sal)
  From emp
  Group by deptno,job
  (2)Select deptno,sum(sal)
  From emp
  Having deptno
  (3)Select sum(sal) from emp
  等价于(1)+(2)+(3)
  Select deptno,job,sum(sal) from emp group byrollup(deptno,job);
  语法:
  Group by rollup(a,b)
  等价于:groupby a,b+group by  a+group by null
  Break on deptno skip 2;--相同的部门号只显示一次,不同的部门号之间
  跳过两行
  --详细的可以看看sql-plus的报表功能


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-568689-1-1.html 上篇帖子: Oracle RMAN 备份到AWS 云 下篇帖子: ORACLE PGA(程序全局区)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表