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

聚合函数

聚合函数基于行组 (而不是单行) 返回单个结果行。聚合函数可以出现在选择列表中, 按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

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐