小言_互联网的博客

《Oracle编程自学与面试指南》15:聚合函数(Aggregate Functions)

440人阅读  评论(0)


1、定义

聚合函数(Aggregate Functions)根据行组而不是单行进行计算,并返回单个结果行,即Oracle将聚合函数应用于每组行,且每组行只执行一次计算并返回一个结果行。

聚合函数可以出现在SELECT列表中,也可以出现在ORDER BY和HAVING子句中,它们通常与SELECT语句中的GROUP BY子句一起使用,但这不是强制的。

首先,在SELECT语句中,Oracle数据库将查询的表或视图的行划分为组。

如果SELECT语句不包含GROUP BY子句,查询的结果集只有一个分组,Oracle将SELECT列表中的聚合函数应用于结果集中的所有行。

如果SELECT语句包含GROUP BY子句,那么Oracle将根据GROUP BY子句中的分组特性将结果集分为多个组,同时,SELECT列表的元素只能是聚合函数、GROUP BY表达式、常量或涉及其中一个的表达式。

我们也可以在SELECT语句的HAVING子句中使用聚合函数,根据聚合函数的结果(而不是根据查询的表或视图中各个行的值)从输出中删除组。

提示:

  • 聚合函数总是作用于一组行,该组可能是数据集划分的许多组的其中之一,或者可能是整个表,不同的组包含不同数量的行,聚合函数对每个组都执行一次。

2、函数列表

  • 常用聚合函数
    AVG
    MAX
    MIN
    SUM
    COUNT

max(),min(),avg(),sum()分析那些存储静态数值型数据的列。

max(),min()函数可以分析任何数据类型的列。

  • 除过count函数的count(*)形式外,这5个函数都可作用于非空值,即所有的聚合函数都忽略分组列或者表达式中包含空值的行。
  • 其它聚合函数

APPROX_COUNT
APPROX_COUNT_DISTINCT
APPROX_COUNT_DISTINCT_AGG
APPROX_COUNT_DISTINCT_DETAIL
APPROX_MEDIAN
APPROX_PERCENTILE
APPROX_PERCENTILE_AGG
APPROX_PERCENTILE_DETAIL
APPROX_RANK
APPROX_SUM
COLLECT
CORR
CORR_*
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST
GROUP_ID
GROUPING
GROUPING_ID
JSON_ARRAYAGG
JSON_OBJECTAGG
LAST
LISTAGG
MEDIAN
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RANK
REGR_ (Linear Regression) Functions
STATS_BINOMIAL_TEST
STATS_CROSSTAB
STATS_F_TEST
STATS_KS_TEST
STATS_MODE
STATS_MW_TEST
STATS_ONE_WAY_ANOVA
STATS_T_TEST_*
STATS_WSR_TEST
STDDEV
STDDEV_POP
STDDEV_SAMP
SYS_OP_ZONE_ID
SYS_XMLAGG
TO_APPROX_COUNT_DISTINCT
TO_APPROX_PERCENTILE
VAR_POP
VAR_SAMP
VARIANCE
XMLAGG

3、案例代码

/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:

注意:
    
*/
-------------------------------------------------------------------------------
--Sample1:将整个结果集作为组.
SELECT  * FROM dept;
SELECT  COUNT(*) FROM dept;

SELECT  *  FROM  emp  WHERE  deptno  = 30;
SELECT  COUNT(*)  FROM  emp  WHERE  deptno  = 30;

-------------------------------------------------------------------------------
--Sample2:通过公共分组特性集合将表分为多个组
SELECT  deptno ,count(empno),sum(sal),avg(sal),MAX(sal),MIN(sal)
      FROM emp
      GROUP BY deptno;--此处写公共分组特性集合,至少一个;
      
-------------------------------------------------------------------------------
--Sample3:特殊练习,计算所有员工的名称的平均长度,所有的小数部分必须舍入到最近的整数.
SELECT round( AVG( LENGTH(ename) ) ) FROM emp;

-------------------------------------------------------------------------------
/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:

注意:
    
*/
-------------------------------------------------------------------------------
--Sample1:Count().
--查询员工总数
SELECT count(*) FROM emp ;--统计结果集中所有行的数量.
SELECT count(deptno) FROM emp ;--统计指定列中非Null值的数量.
SELECT count(ename) FROM emp ;--统计指定列中非Null值的数量.
-------------------------------------------------------------------------------
--Sample2:分析存储静态数值类型数据的列.
--查询公司最低工资
SELECT min(sal) FROM emp ;
  
--查询公司最高工资
SELECT max(sal) FROM emp ;
  
--查询公司平均工资
SELECT avg(sal) FROM emp ;
  
--查询公司待发工资数
SELECT sum(sal) FROM emp ;

-------------------------------------------------------------------------------
--Sample3:max(),min()函数可以分析任何数据类型的列
SELECT max(ename),min(ename) from emp;--按照字母次序排列计算.

-------------------------------------------------------------------------------

好好学习,天天向上!继续下一章…👏👏👏👏👏👏



感谢您阅读,如果对作者其它文章也很感兴趣,请扫码关注!🚀🚀🚀🚀🚀🚀



转载:https://blog.csdn.net/goldentec/article/details/104869749
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场