第5讲SQL数据分组查询

上传人:痛*** 文档编号:195018269 上传时间:2023-03-14 格式:PDF 页数:5 大小:185.81KB
返回 下载 相关 举报
第5讲SQL数据分组查询_第1页
第1页 / 共5页
第5讲SQL数据分组查询_第2页
第2页 / 共5页
第5讲SQL数据分组查询_第3页
第3页 / 共5页
点击查看更多>>
资源描述
第 5 讲 数据分组查询 1、分组函数 分组函数用于统计表的数据,作用于多行,并返回一个统计结果。分组函数又称多行函数。使用范围:(1)分组函数只能出现在选择列、order by 子句、having 子句中(2)当使用分组函数时,会忽略 null 行(3)如果在选择列表中既包含分组函数,也包含了其它列和表达式,那么这些列和表达式必须出现在 group by 子句中。(4)当使用分组函数时,可以在函数中指定 all 和 distinct 选项。其中 all 是默认选项,该选项表示统计所有行数据(包含重复值);如果指定 distinct,则只会统计不同行值。1.1 Max、Min、Avg 和 Sum Max 函数:取列或表达式最大值;Min 函数:取列或表达式最小值;Avg 函数:取得列或表达式平均值;Sum 函数:取得列或表达式总和。例:查询雇员的最高工资、最低工资、平均工资以及工资总额。SQL select max(sal),min(sal),avg(sal),sum(sal)from emp;MAX(SAL)MIN(SAL)AVG(SAL)SUM(SAL)-5000 800 2073.21428 29025 练习 1:查询从事销售工作的雇员最高工资、最低工资、平均工资以及工资总额。SQL select max(sal),min(sal),avg(sal),sum(sal)from emp where job like%SALES%;MAX(SAL)MIN(SAL)AVG(SAL)SUM(SAL)-1600 1250 1400 5600 练习 2:查询部门编号为 30 的部门雇员最高工资、最低工资、平均工资以及工资总额。练习 3:计算能获得奖金的雇员平均奖。练习 4:计算公司所有雇员的平均奖。(组函数中使用 nvl 函数)SQL select avg(nvl(comm,0)as 所有雇员平均奖 from emp;所有雇员平均奖-157.1428571428 1.2 count Count 函数:取得满足条件的记录总行数。例 1:统计公司雇员总人数。SQL select count(*)as 雇员总人数 from emp;雇员总人数-14 例 2:统计 30 号部门能挣得奖金的雇员总人数 SQL select count(comm)as 能挣得奖金人数 from emp where deptno=30;能挣得奖金人数-4 练习 1:统计在 30 号部门工作的雇员人数 练习 2:统计公司工作为“MANAGER”的雇员人数 练习 3:统计公司工资在 11003000元之间的雇员人数 2、Group by 和 having 子句 Group by 子句用于对查询结果分组统计;having 子句用于限制分组显示结果 2.1 使用 group by 进行单列分组 基于单列生成分组统计结果,为分组列的每个不同值分别生成统计结果 例:查询每个部门的平均工资,按部门编号升序排列 SQL select deptno,avg(sal)from emp group by deptno order by deptno;DEPTNO AVG(SAL)-10 2916.66666 20 2175 30 1566.66666 练习:查询每个岗位的平均工资,按计算结果排序 2.2 使用 group by 进行多列分组 基于两个或两个以上的列生成分组统计结果。例:查询每个部门每种岗位的最低工资、最高工资和平均工资,按部门编号排序。SQL select deptno,job,min(sal),max(sal),avg(sal)from emp group by deptno,job order by deptno;DEPTNO JOB MIN(SAL)MAX(SAL)AVG(SAL)-10 CLERK 1300 1300 1300 10 MANAGER 2450 2450 2450 10 PRESIDENT 5000 5000 5000 20 ANALYST 3000 3000 3000 20 CLERK 800 1100 950 20 MANAGER 2975 2975 2975 30 CLERK 950 950 950 30 MANAGER 2850 2850 2850 30 SALESMAN 1250 1600 1400 思考?group by 子句中是否可以漏写 job 字段。练习:按所在部门及从事工作分组统计雇员一年内薪水总和,按部门编号排序。SQL select deptno as 部门编号,job as 工作,sum(12*(sal+nvl(comm,0)as 薪水总和 from emp group by deptno,job order by deptno;部门号 工作 薪水总和-10 CLERK 15600 10 MANAGER 29400 10 PRESIDENT 60000 20 ANALYST 72000 20 CLERK 22800 20 MANAGER 35700 30 CLERK 11400 30 MANAGER 34200 30 SALESMAN 93600 2.3 使用 having 子句限制分组显示结果 Having 子句必须出现在 group by 子句后面。例:按部门显示平均工资低于 2500 的部门号、平均工资和最高工资。SQL select deptno as 部门编号,avg(sal)as 平均工资,max(sal)as 最高工资 from emp group by deptno having avg(sal)select deptno as 部门编号,avg(sal)as 平均工资,max(sal)as 最高工资 from emp where avg(sal)select deptno as 部门编号,max(sal)as 最高工资 from emp group by deptno having max(sal)2900;练习2:显示非销售雇员工作名称以及从事同一工作雇员的月工资总和,并且满足从事同一工作雇员的月工资总和大于5000,输出结果按月工资总和升序排序。SQL select job as 工作,sum(sal)as 月工资总和 from emp where job not like%SALES%group by job having sum(sal)5000 order by sum(sal);工作 月工资总和-ANALYST 6000 MANAGER 8275 2.4 分组函数嵌套 例:显示各部门平均工资最低值和最高值。SQL select min(avg(sal)平均工资最低值,max(avg(sal)平均工资最高值 from emp group by deptno;平均工资最低值 平均工资最高值-1566.666666666 2916.666666666 练习:按雇员从事的工作显示平均工资最低值和最高值。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!