原创:oracle聚合函数介绍 <六>

本文深入探讨了SQL中的聚合函数及其使用方法,包括Count、Min、Max、Sum和Avg函数。同时介绍了如何使用分组函数GROUP BY来按特定列对数据进行分组,并展示了如何与HAVING子句结合使用。文章还详细解释了嵌套函数的概念及其实例,为读者提供了全面的SQL数据处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

聚合函数对一组行中的某个列执行计算执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 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. FROMtable
  11. [WHEREcondition]
  12. [GROUPBYcolumn]
  13. [ORDERBYcolumn];
  14. //返回总记录数//*代表的是:一条记录
  15. SQL>selectcount(*)fromemp;
  16. //返回comm不为空的总记录数
  17. SQL>selectcount(comm)fromemp;
  18. //COUNT(DISTINCTexpr)返回expr非空且不重复的记录总数
  19. SQL>selectcount(distinct(sal))fromemp;
  20. 注意:组函数忽略空值。
  21. //返回所有员工的平均工资
  22. SQL>selectavg(nvl(sal,0))fromemp;
  23. 注意:NVL函数使分组函数无法忽略空值
  24. //返回员工编号最小值
  25. SQL>selectmin(empno)fromemp;
  26. //返回员工工资最大值
  27. SQL>selectmax(sal)fromemp;
  28. //求该月本公司发出的工资总额
  29. SQL>selectsum(comm)+sum(sal)fromemp;
  30. SQL>selectsum(nvl(sal,0)+nvl(comm,0))fromemp;
  31. Groupby子句
  32. GroupBy语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用groupby子句。不管select是否使用了where子句都可以使用groupby子句。
  33. 注意:groupby子句一定要与分组函数结合使用,否则没有意义。
  34. //求出每个部门的员工人数
  35. SQL>selectdeptno,count(*)as"人数"fromempgroupbydeptno;
  36. //求出每个部门的员工的平均工资
  37. SQL>selectdeptno,avg(nvl(sal,0))fromempgroupbydeptno;
  38. //注意:groupby子句中的列不必包含在SELECT列表中
  39. SQL>selectavg(nvl(sal,0))fromempgroupbydeptno;
  40. //求出某个部门中相同职位的员工人数groupby后可以跟多个分组的字段
  41. SQL>selectdeptno,job,count(*)fromempgroupbydeptno,joborderbydeptno;
  42. 非法使用组函数
  43. 1、所用包含于SELECT列表中,而未包含于组函数中的列都必须包含于GROUPBY子句中。
  44. 举例:
  45. SQL>selectempno,count(job)fromemp;
  46. 正确写法如下:
  47. SQL>selectempno,count(job)fromempgroupbyempno;
  48. 2、不能在WHERE子句中使用组函数(注意)。
  49. SQL>selectdeptnofromempwherecount(job)>0groupbydeptno;
  50. 备注:ORA-00934:此处不允许使用分组函数
  51. Having子句
  52. HAVING子句对GROUPBY子句设置条件的方式与WHERE子句和SELECT语句交互的方式类似。WHERE子句搜索条件在进行分组操作之前应用;而HAVING搜索条件在进行分组操作之后应用。HAVING语法与WHERE语法类似,但HAVING可以包含聚合函数。HAVING子句可以引用选择列表中出现的任意项。
  53. 备注:having子句通常与groupby子句结合使用
  54. 语法:
  55. SELECTcolumn,group_function
  56. FROMtable
  57. [WHEREcondition]
  58. [GROUPBYgroup_by_expression]
  59. [HAVINGgroup_condition]
  60. [ORDERBYcolumn];
  61. //查询部门的员工人数大于五部门编号
  62. SQL>selectdeptno,count(*)fromempgroupbydeptnohavingcount(*)>5;
  63. 备注:分组函数可以嵌套
  64. 嵌套函数
  65.   函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则.
  66.  嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中
  67. 总结:整个查询语句的语法格式如下:
  68. SELECTcolumn,group_function(column)
  69. FROMtable
  70. [WHEREcondition]
  71. [GROUPBYgroup_by_expression]
  72. [HAVINGgroup_condition]
  73. [ORDERBYcolumn];
  74. 以上内容归redarmy_chen所有,如需转载请附带出处,如有疑问请发送至redarmy_chen@qq.com

更多学习资源请访问这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值