oracle 分析函数解析,分析函数详解

Introduction

Probably the easiest way to understand analytic functions is to start by looking at aggregate functions.

An aggregate function, as the name suggests, aggregates data from several rows into a single result row.

select avg(sal) from emp;

*统计函数:统计多行数据的信息到一行

The GROUP BY clause allows us to apply aggregate functions to subsets of rows.

select deptno,avg(sal) from emp group by deptno

*分组函数用于将分散的多行数据分为多个集合

*统计函数用于统计多行的数据到一行,它会减少返回的行数

Analytic functions also operate on subsets of rows, similar to aggregate functions in GROUP BY queries, but they do not reduce the number of rows returned by the query.

select empno,deptno,sal,avg(sal) over(partiton by deptno) as avg_dept_sal from emp;

*分析函数的作用类似于分组函数和统计函数的组合:

分析函数用于对分组后的数据进行统计;

不同于统计函数和分组函数的是,分析函数并不会减少返回的行数

分析函数不会减少返回的行数的原因是因为分析函数是在所有的join连接,where条件,group by操作和having条件全部执行完毕之后才会执行。

Analytic Function Syntax

There are some variations in the syntax of the individual analytic functions, but the basic syntax for an analytic function is as follows.

analytic_funceion ([arguments]) over (analytic_clause)

The analytic_clause breaks down into the following optional elements.

[ query_partition_clause ] [ order_by_clause [ windowing_clause ] ]

query_partition_clause

The query_partition_clause divides the result set into partitions, or groups, of data.

If the query_partition_clause is omitted, the whole result set is treated as a single partition.

select empno,deptno,sal,avg(sal) over() as avg_sal from emp;

select empno,deptno,sal,avg(sal) over(partition by deptno) as avg_dept_sal from emp;

*如果没有指定query_partition_clause选项,那么整个结果集只会被当做一个分区处理

order_by_clause

The order_by_clause is used to order rows, or siblings, within a partition.

select empno,deptno,sql,first_value(sal ignore nulls) over (partition by deptno order by sal asc nulls last) as first_val_in_dept from emp;

select empno,deptno,sal,first_value(sal ignore nulls) over (partition by deptno) as first_sal_in_dept from emp;

windowing_clause

The windowing_clause is an extension of the order_by_clause and as such, it can only be used if an order_by_clause is present.

The windowing_clause has two basic forms.

RANGE BETWEEN start_point AND end_point

ROWS BETWEEN start_point AND end_point

Possible values for "start_point" and "end_point" are:

UNBOUNDED PRECEDING : The window starts at the first row of the partition. Only available for start points.

UNBOUNDED FOLLOWING : The window ends at the last row of the partition. Only available for end points.

CURRENT ROW : The window starts or ends at the current row. Can be used as start or end point.

value_expr PRECEDING : A physical or logical offset before the current row using a constant or expression that evaluates to a positive numerical value. When used with RANGE, it can also be an interval literal if the order_by_clause uses a DATE column.

value_expr FOLLOWING : As above, but an offset after the current row.

*windowing_clause只有在order_by_clause出现的时候才能使用

Using Analytic Functions

AVG *

CLUSTER_DETAILS

CLUSTER_DISTANCE

CLUSTER_ID

CLUSTER_PROBABILITY

CLUSTER_SET

CORR *

COUNT *

COVAR_POP *

COVAR_SAMP *

CUME_DIST

DENSE_RANK

FEATURE_DETAILS

FEATURE_ID

FEATURE_SET

FEATURE_VALUE

FIRST

FIRST_VALUE *

LAG

LAST

LAST_VALUE *

LEAD

LISTAGG

MAX *

MIN *

NTH_VALUE *

NTILE

PERCENT_RANK

PERCENTILE_CONT

PERCENTILE_DISC

PREDICTION

PREDICTION_COST

PREDICTION_DETAILS

PREDICTION_PROBABILITY

PREDICTION_SET

RANK

RATIO_TO_REPORT

REGR_ (Linear Regression) Functions *

ROW_NUMBER

STDDEV *

STDDEV_POP *

STDDEV_SAMP *

SUM *

VAR_POP *

VAR_SAMP *

VARIANCE *

英文参考:http://oracle-base.com/articles/misc/analytic-functions.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值