oracle聚合函数介绍

http://redarmychen.iteye.com/blog/1004805

 

聚合函数对一组行中的某个列执行计算执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,所以有的时候也把其称之为分组函数。 
   在下面的介绍过程中我们还重点讲解了group by having等知识点,希望你所有收获! 

Java代码  收藏代码
    1. 常见的分组函数有:  
    2. 函数名称    函数描述  
    3. Count   返回找到的记录数  
    4. Min 返回一个数字列或计算列的最小值  
    5. Max 返回一个数字列或计算列的最大值  
    6. Sum 返回一个数字列或计算列总和  
    7. avg 返回一个数字列或计算列的平均值  
    8. 分组函数的语法:  
    9. SELECT  [column,] group_function(column), ...   
    10. FROM        table   
    11. [WHERE  condition]  
    12. [GROUP BY   column]  
    13. [ORDER BY   column];  
    14. //返回总记录数   //* 代表的是:一条记录  
    15. SQL> select count(*) from emp;  
    16. //返回comm不为空的总记录数  
    17. SQL> select count(comm) from emp;  
    18. //COUNT(DISTINCT expr) 返回 expr非空且不重复的记录总数   
    19. SQL> select count(distinct(sal)) from emp;  
    20. 注意:组函数忽略空值。  
    21. //返回所有员工的平均工资     
    22. SQL> select avg(nvl(sal,0)) from emp;  
    23. 注意:NVL函数使分组函数无法忽略空值  
    24. //返回员工编号最小值     
    25. SQL> select min(empno) from emp;  
    26. //返回员工工资最大值  
    27. SQL> select max(sal) from emp;  
    28. //求该月本公司发出的工资总额  
    29. SQL> select sum(comm)+sum(sal) from emp;  
    30. SQL> select sum(nvl(sal,0)+nvl(comm,0)) from emp;  
    31.   
    32. Group by子句  
    33. Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。  
    34.   
    35. 注意:group by子句一定要与分组函数结合使用,否则没有意义。  
    36. //求出每个部门的员工人数  
    37. SQL> select deptno,count(*) as "人数" from emp group by deptno;  
    38. //求出每个部门的员工的平均工资  
    39. SQL> select deptno,avg(nvl(sal,0)) from emp group by deptno;  
    40. //注意:group by 子句中的列不必包含在SELECT 列表中  
    41. SQL> select avg(nvl(sal,0)) from emp group by deptno;  
    42.   
    43. //求出某个部门中相同职位的员工人数   group by 后可以跟多个分组的字段  
    44. SQL> select deptno,job,count(*) from emp group by deptno,job order by deptno;  
    45.   
    46. 非法使用组函数  
    47. 1、  所用包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中。  
    48. 举例:  
    49. SQL> select empno,count(job) from emp;  
    50. 正确写法如下:  
    51. SQL> select empno,count(job) from emp group by empno;  
    52. 2、  不能在 WHERE 子句中使用组函数(注意)。  
    53. SQL> select deptno from emp where count(job)>0 group by deptno;  
    54. 备注:ORA-00934: 此处不允许使用分组函数  
    55.   
    56. Having 子句  
    57.     HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。  
    58. 备注:having子句通常与group by子句结合使用  
    59.   
    60. 语法:  
    61. SELECT  column, group_function   
    62. FROM        table   
    63. [WHERE  condition]  
    64. [GROUP BY   group_by_expression]   
    65. [HAVING group_condition]  
    66. [ORDER BY   column];   
    67. //查询部门的员工人数大于五部门编号  
    68. SQL> select deptno,count(*) from emp group by deptno having count(*)>5;  
    69.   
    70. 备注:分组函数可以嵌套  
    71.   
    72. 嵌套函数  
    73.   
    74.   函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则.  
    75.  嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中  
    76. 总结:整个查询语句的语法格式如下:  
    77. SELECT  column, group_function(column)   
    78. FROM        table   
    79. [WHERE  condition]  
    80. [GROUP BY   group_by_expression]   
    81. [HAVING group_condition]  
    82. [ORDER BY   column];  
    83.   
    84.   
    85. 以上内容归redarmy_chen所有,如需转载请附带出处,如有疑问请发送至redarmy_chen@qq.com
posted @ 2015-03-09 19:30  sunruntheway  阅读(206)  评论(0)    收藏  举报