欢迎来到天天文库
浏览记录
ID:51889550
大小:115.00 KB
页数:4页
时间:2020-03-18
《[精品]Oracle入门基础第二讲(2).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、组函数(GROUPFUNCTION)max/min/avg/sum/countcount(*)统计记录总数例:员工表屮有多少条记录?SQL>selectcount(*)fromemp;例:员工分布在多少个不同的部门,去掉重复值后统计SQL>selectcount(distinctdeptno)fromemp;例:入职吋间不是null的数据总数。SQL>selectcount(hiredate)fromemp;-avg/sum针对数字的操作-max/min对所有数据类型都可以操作例:对工资进行函数计算。SQL>selectavg(sal)fromemp;SQL>selec
2、tsum(sal)fromemp;SQL>selectmax(sal)fromemp;SQL>selectmin(sal)fromemp;下面这两个验证数据,没有什么意义。SQL>selectmax(hiredate)fromemp;SQL>selectmin(job)fromemp;练习:计算员工的人数总和、奖金总和、平均奖金是多少?错误的写法:SQL>selectcount(*)num,sum(comm)sum_comm,avg(comm)avg_commfromemp;大家会发现问题:没有考虑没有奖金的员工,简单计算公式:薪水平均值二薪水总和/人数总和avg(co
3、mm)=sum(comm)/countC*)而avg(comm)只按有薪水的员工人数计算平均值,这样得到的数据不够准确。SQL>selectsum(comm)/counl(*)fromemp;练习:还有一种计算平均奖金的写法,fflnvl来表示。SQL>selectavg(nvl(comm,0))fromemp;注意:组函数:count/avg/sum/max/min如果函数中写列名,默认忽略空值练习:计算最早和最晚的员工入职吋间SQL>selectmax(hiredate)late,min(hiredate)earlyfromemp;GROUPBY及HAVING子句求
4、薪水总和的方法:SQL>selectsum(sal)fromemp;我想按部门分组,计算每个部门员工的工资和:SQL>selectdeptno,sum(sal)fromempgroupbydeptno;例:计算每个职位的平均薪水。SQL>selectjob,avg(sal)fromemp;—报错:不是单组分组函数SQL>selectavg(sal)fromempgroupbyjob;注意:select后出现的歹!j,凡是没有被组函数包围的列,必须出现在groupby短语中;出现在groupby后面的列,不一定出现在select后面,但是信息不完整。结论:select后面
5、的非组函数的列和groupby后面列保持一致。例:计算每个部门的薪水总和和平均薪水?SQL>selectdeptno,sum(sal)sum_s,avg(nvl(sal,O))avg_sfromempgroupbydeptno;练习:按职位分组,每个职位的最高、最低薪水和人数?having子句注意区别where是对表中数据的过滤;having是对分组得到的结果数据进一步过滤。过滤分组结果select-from-where-gro叩by—having—orderby这是正常执行顺序,例:哪些部门的平均薪水大于2000。SQL>selectdeptno,avg(sal)fr
6、omempgroupbydeptnohavingavg(sal)>2000;注意:凡是对组函数过滤,使用having,非主函数用where«如果换成下而代码,就会报错。SQL>selectdeptno,avg(sal)fromempwhereavg(sal)>2000groupbydeptno;where->groupby->having的执行顺序。例:哪些职位的人数超过2个人?SQL>selectjob,count(*)fromempwherejobisnotnullgroupbyjobhavingcount(*)>2orderbycount(*);练习:计算哪个部门
7、的人数是超过5个人••用ordtrby进行排序,orckrby一定放在最后。课堂练习:1、找出每个月倒数第三天受雇的员工(如:2012-9-28)oSQL>select*fromempwherelast_day(hiredate)-2=hiredate;2、所有员工名字前加上Dear,并且首字母大写。SQL>select'Dear'IIinitcap(ename)fromemp;SQL>selectcancat(*Dearinitcap(ename))fromemp;3、算出每个职位的员工数和最低工资。SQL>selectjob,cou
此文档下载收益归作者所有