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