《oracle分组函数.ppt》由会员分享,可在线阅读,更多相关《oracle分组函数.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、分组函数分组函数 组函数类型组函数类型SELECTcolumn,group_function(column),.FROMtableWHEREconditionGROUP BYcolumnORDER BYcolumn;组函数语法组函数语法创建一个查询,显示出员工的平均、最高、最低以及工资总和。创建一个查询,显示出员工的平均、最高、最低以及工资总和。AVG(平均值)和平均值)和 SUM(合计)函数合计)函数MIN(最小值)和最小值)和 MAX(最大值)函数最大值)函数创建一个查询,显示出年龄最小与年龄最大的员工的年龄。创建一个查询,显示出年龄最小与年龄最大的员工的年龄。创建一个查询,显示按字母排序
2、,员工的排在最前面和最后面的名字。创建一个查询,显示按字母排序,员工的排在最前面和最后面的名字。创建一个查询,显示部门创建一个查询,显示部门50的员工总数。的员工总数。COUNT(计数)函数计数)函数创建一个查询,显示部门创建一个查询,显示部门80中有佣金的员工人数。中有佣金的员工人数。创建一个查询,显示出创建一个查询,显示出employees表中不重复的部门数。表中不重复的部门数。COUNT(计数)函数计数)函数SELECT AVG(commission_pct)FROM employees;组函数与空值组函数与空值组函数忽略空值。组函数忽略空值。SELECT AVG(NVL(commiss
3、ion_pct,0)FROM employees;在组函数中使用在组函数中使用NVL函数函数NVL函数使分组函数无法忽略空值。函数使分组函数无法忽略空值。分组数据分组数据 EMPLOYEES求出求出EMPLOYEES表中各表中各部门的部门的平均工资平均工资440095003500640010033SELECTcolumn,group_function(column)FROMtableWHEREconditionGROUP BYgroup_by_expressionORDER BYcolumn;分组数据分组数据:GROUP BY 子句语法子句语法可以使用可以使用GROUP BY 子句将表中的数据
4、分子句将表中的数据分成若干组成若干组SELECT department_id,AVG(salary)FROM employeesGROUP BY department_id;GROUP BY 子句子句 在在SELECT 列表中所有未包含在组函数列表中所有未包含在组函数中的列都应该包含中的列都应该包含在在 GROUP BY 子句中。子句中。GROUP BY 子句子句 包含在包含在 GROUP BY 子句中的列不必包含在子句中的列不必包含在SELECT 列表中。列表中。SELECT AVG(salary)FROM employeesGROUP BY department_id;使用多个列分组使用多
5、个列分组EMPLOYEES使用多个列使用多个列进行分组进行分组SELECT department_id dept_id,job_id,SUM(salary)FROM employeesGROUP BY department_id,job_id;在在GROUP BY 子句中包含多个列子句中包含多个列非法使用组函数非法使用组函数所用包含于所用包含于SELECT 列表中,而未包含于组函列表中,而未包含于组函数中的列都数中的列都必须包含于必须包含于 GROUP BY 子句中。子句中。SELECT department_id,COUNT(last_name)FROM employees;SELECT d
6、epartment_id,COUNT(last_name)*ERROR at line 1:ORA-00937:not a single-group group functionGROUP BYGROUP BY 子句中缺少列子句中缺少列子句中缺少列子句中缺少列非法使用组函数非法使用组函数不能在不能在 WHERE 子句中使用组函数。子句中使用组函数。可以在可以在HAVING 子句中使用组函数。子句中使用组函数。SELECT department_id,AVG(salary)FROM employeesWHERE AVG(salary)8000GROUP BY department_id;WHER
7、E AVG(salary)8000 *ERROR at line 3:ORA-00934:group function is not allowed hereWHEREWHERE 子句中不能使用组函数子句中不能使用组函数子句中不能使用组函数子句中不能使用组函数过滤分组过滤分组The maximumsalaryper departmentwhen it isgreater than$10,000EMPLOYEESSELECTcolumn,group_functionFROMtableWHEREconditionGROUP BYgroup_by_expressionHAVINGgroup_cond
8、itionORDER BYcolumn;过滤分组:过滤分组:HAVING 子句子句使用使用 HAVING 过滤分组过滤分组:1.行已经被分组。行已经被分组。2.使用了组函数。使用了组函数。3.满足满足HAVING 子句中条件的分组将被显示。子句中条件的分组将被显示。HAVING 子句子句SELECT department_id,MAX(salary)FROM employeesGROUP BY department_idHAVING MAX(salary)10000;SELECT job_id,SUM(salary)PAYROLLFROM employeesWHERE job_id NOT L
9、IKE%REP%GROUP BY job_idHAVING SUM(salary)13000ORDER BY SUM(salary);HAVING 子句子句嵌套组函数嵌套组函数显示平均工资的最大值显示平均工资的最大值SELECT MAX(AVG(salary)FROM employeesGROUP BY department_id;SELECTcolumn,group_function(column)FROMtableWHEREconditionGROUP BYgroup_by_expressionHAVINGgroup_conditionORDER BYcolumn;总结总结通过本章学习,您已经学会通过本章学习,您已经学会:使用组函数。使用组函数。在查询中使用在查询中使用 GROUP BY 子句。子句。在查询中使用在查询中使用 HAVING 子句。子句。