ORACLE官方SQL语言参考笔记之函数(第五章-第三节-聚合函数)

聚合函数

聚合函数基于行组 (而不是单行) 返回单个结果行。聚合函数可以出现在选择列表中, 按ORDER BY显示和HAVING子句。它们通常与SELECT语句中的GROUP BY子句一起使用, 其中 Oracle 数据库将查询的表或视图的行划分为组。在包含GROUP BY子句的查询中, 选择列表的元素可以是聚合函数、BY表达式GROUP、常量或包含其中之一的表达式。Oracle 将聚合函数应用于每一组行, 并为每个组返回单个结果行。

如果省略GROUP BY子句, 则 Oracle 将 select 列表中的聚合函数应用于查询的表或视图中的所有行。HAVING子句中使用聚合函数, 可以基于聚合函数的结果 (而不是查询的表或视图的各个行的值) 从输出中消除组。

另请参见:

"使用 group by 子句: 示例""having 子句" , 了解有关GROUP BY子句的更多信息, 并在查询和子查询中HAVING子句

具有单个参数的许多 (但并非全部) 聚合函数接受这些子句:

  • DISTINCT的和UNIQUE的, 这是同义词, 导致聚合函数只考虑参数表达式的不同值。本章中聚合函数的语法图使用了DISTINCT于简单性的关键字。

  • ALL导致聚合函数考虑所有值, 包括所有重复项。

例如, 1、1、1和3的DISTINCT平均值为2。平均值ALL为1.5。如果不指定, 则默认值为ALL.

某些聚合函数允许windowing_clause, 它是解析函数语法的一部分。有关此子句的信息, 请参阅 windowing_clause 在本节末尾的聚合函数列表中, 允许windowing_clause的函数后跟星号 (*)

COUNT(*)、GROUPINGGROUPING_ID之外的所有聚合函数都忽略 null。可以将参数中的NVL函数用于聚合函数以替换 null 值。COUNTREGR_COUNT从不返回 null, 但返回一个数字或零。对于所有剩余的聚合函数, 如果数据集不包含行, 或者只包含具有 null 的行作为聚合函数的参数, 则该函数返回 null。

聚合函数MINMAXSUM、 AVGCOUNTVARIANCESTDDEV, 后跟KEEP关键字时, 可以与FIRSTLAST一个函数来对一组值进行操作, 这些行在对给定的排序规范进行排序时是FIRST个或LAST一个。有关详细信息, 请参阅第一个

可以嵌套聚合函数。例如, 下面的示例计算示例架构hr中所有部门的最高工资平均数。:

SELECT AVG(MAX(salary))
  FROM employees
  GROUP BY department_id;

AVG(MAX(SALARY))
----------------
      10926.3333

此计算评估由GROUP BY by 子句 (department_id) 定义的每个组的内部聚合 (MAX(salary)), 并再次聚合结果。

在下面的聚合函数列表中, 后跟星号 (*) 的函数允许windowing_clause.

AVG
COLLECT
CORR
CORR_*
COUNT
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST
GROUP_ID
GROUPING
GROUPING_ID
LAST
LISTAGG
MAX
MEDIAN
MIN
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
SUM
SYS_XMLAGG
VAR_POP
VAR_SAMP
VARIANCE
XMLAGG

猜你喜欢

转载自blog.csdn.net/HuYingZuo/article/details/80642312