欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ORACLE官方SQL语言参考之聚合函数实例讲解

程序员文章站 2022-03-09 07:51:08
聚合函数 聚合函数基于行组 (而不是单行) 返回单个结果行。聚合函数可以出现在选择列表中, 按orderby显示和having子句。它们通常与select语句中的groupby子句一起使用, 其中...

聚合函数

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

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

另请参见:

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

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

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

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

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

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

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

聚合函数min、max、sum、avg、count、variance和stddev, 后跟keep关键字时, 可以与first或last一个函数来对一组值进行操作, 这些行在对给定的排序规范进行排序时是first个或last一个。有关详细信息, 请参阅第一个。

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

select avg(max(salary))

from employees

group by department_id;

avg(max(salary))

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

10926.3333

此计算评估由groupbyby 子句 (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