Oracle over函数的学习笔记六 平均值 份额 报表函数

取平均值函数

AVG 返回expr的平均值.如果你指定DISTINCT, 那么你只能指定analytic_clause query_partition_clause. The order_by_clause windowing_clause 不允许使用。

下面的例子对于employees表中的每个雇员,计算同一个经理的平均薪水,其恰好处于该雇员的前面和后面被雇佣的(该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来)

avg函数如果不加order子句,窗口为每个partition分组内的数据记录集合,如果加了order子句,则默认窗口为rows between unbounded preceding and current row.

Kochhar  (17000+17000)/2

De haan :(17000+17000+11000)/3

Raphaely:(17000+11000+7900)/3……

求份额函数:

NTILE
功能描述:将一个组分为"表达式"的散列表示,例如,如果表达式=4,则给组中的每一行分配一个数(从14),如果组中有20行,则给前5行分配1,给下5行分配2等等。如果组的基数不能由表达式值平均分开,则对这些行进行分配时,组中就没有任何percentile的行数比其它percentile的行数超过一行,最低的percentile是那些拥有额外行的percentile。例如,若表达式=4,行数=21,则percentile=1的有5行,percentile=2的有5行等等。
SAMPLE
:下例中把6行数据分为4

SELECT last_name, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM employees
WHERE department_id = 100;

LAST_NAME   SALARY    QUARTILE
--------- ---------- ----------
Greenberg  12000    1
Faviet     9000     1
Chen       8200     2
Urman      7800     2
Sciarra    7700     3
Popp       6900     4

报表处理函数

RATIO_TO_REPORT

功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。可以直接取得所占的份额。如果 expr 评估为null, 那么ratio-to-report的值也为空.

SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比

SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
FROM employees
WHERE job_id = 'PU_CLERK';

LAST_NAME SALARY    RR
-------- ---------- ----------
Khoo       3100    .223021583
Baida      2900    .208633094
Tobias     2800    .201438849
Himuro     2600    .18705036
Colmenares 2500    .179856115

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-710103/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7177735/viewspace-710103/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值