Oracle分析函数六——数据分布函数及报表函数

Oracle分析函数——数据分布函数及报表函数

CUME_DIST

功能描述:计算一行在组中的相对位置,CUME_DIST总是返回大于0、小于或等于1的数,该数表示该行在N行中的位置。例如,在一个3行的组中,返回的累计分布值为1/32/33/3

SAMPLE:下例中计算每个部门的员工按薪水排序依次累积出现的分布百分比

SELECT

 department_id,

 first_name||' '||last_name employee_name,

 salary,

 CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) AS cume_dist

FROM employees

NTILE

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

SAMPLE:下例中把6行数据分为4

SELECT

 department_id,

 first_name||' '||last_name employee_name,

 salary,

 NTILE(4) OVER (PARTITION BY department_id ORDER BY salary DESC) AS quartile

 FROM employees

 

PERCENT_RANK

功能描述:和CUME_DIST(累积分配)函数类似,对于一个组中给定的行来说,在计算那行的序号时,先减1,然后除以n-1n为组中所有的行数)。该函数总是返回01(包括1)之间的数。

SAMPLE:下例中如果Khoosalary2900,则pr值为0.6,因为RANK函数对于等值的返回序列值是一样的

 

SELECT  

 department_id,

 first_name||' '||last_name employee_name,

 salary,

 PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) AS pr

FROM employees

ORDER BY department_id,salary;

 

PERCENTILE_DISC

功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。

注意:本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同

 

SAMPLE:下例中0.7的分布值在部门30中没有对应的Cume_Dist值,所以就取下一个分布值0.83333333所对应的SALARY来替代

 

SELECT

 department_id,

 first_name||' '||last_name employee_name,

 salary,

 PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary ) OVER (PARTITION BY department_id) "Percentile_Disc",

 CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) "Cume_Dist"

FROM employees<!--[if !vml]--><!--[endif]-->

PERCENTILE_CONT

功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数PERCENT_RANK,如果没有正好对应的数据值,就通过下面算法来得到值:

RN = 1+ (P*(N-1))其中P是输入的分布百分比值,N是组内的行数

CRN = CEIL(RN) FRN = FLOOR(RN)

if (CRN = FRN = RN) then

(value of expression from row at RN)

else

(CRN - RN) * (value of expression for row at FRN) +

(RN - FRN) * (value of expression for row at CRN)

注意:本函数与PERCENTILE_DISC的区别在找不到对应的分布值时返回的替代值的计算方法不同

算法太复杂,看不懂了L

SAMPLE:在下例中,对于部门60Percentile_Cont值计算如下:

P=0.7 N=5 RN =1+ (P*(N-1)=1+(0.7*(5-1))=3.8 CRN = CEIL(3.8)=4

FRN = FLOOR(3.8)=3

4 - 3.8* 4800 + (3.8 - 3) * 6000 = 5760

SELECT

 department_id,

 first_name||' '||last_name employee_name,

 salary,  

 PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) "Percentile_Disc",

 PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) "Percentile_Cont",

 PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) "Percent_Rank"

 FROM employees

总案例

SELECT

 department_id,

 first_name||' '||last_name employee_name,

 salary,

 CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) AS cume_dist, --数据分布百分比

 NTILE(4) OVER (PARTITION BY department_id ORDER BY salary) AS quartile,    --数据分布,以NTILE中的exp来计算

 PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) AS pr,    --数据分布百分比,从0开始计

 PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary ) OVER (PARTITION BY department_id) "Percentile_Disc", --输入的分布百分比值相对应的数据值

 PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) "Percentile_Cont"   --表达式太复杂了,...

FROM employees

 

RATIO_TO_REPORT

功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。

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

SELECT

 department_id,

 first_name||' '||last_name employee_name,

 salary,

 RATIO_TO_REPORT(salary) OVER () AS rr

FROM employees

WHERE job_id = 'PU_CLERK';

REGR_ (Linear Regression) Functions

功能描述:这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用。

REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2)

REGR_INTERCEPT:返回回归线的y截距,等于

AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)

REGR_COUNT:返回用于填充回归线的非空数字对的数目

REGR_R2:返回回归线的决定系数,计算式为:

If VAR_POP(expr2) = 0 then return NULL

If VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1

If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 then

return POWER(CORR(expr1,expr),2)

REGR_AVGX:计算回归线的自变量(expr2)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr2)

REGR_AVGY:计算回归线的应变量(expr1)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr1)

REGR_SXX返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)

REGR_SYY返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)

REGR_SXY:返回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)

 

(下面的例子都是在SH用户下完成的)

SAMPLE 1:下例计算1998年最后三个星期中两种产品(260270)在周末的销售量中已开发票数量和总数量的累积斜率和回归线的截距

 

SELECT t.fiscal_month_number "Month", t.day_number_in_month "Day",

REGR_SLOPE(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_SLOPE,

REGR_INTERCEPT(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_ICPT

FROM sales s, times t

WHERE s.time_id = t.time_id

AND s.prod_id IN (270, 260)

AND t.fiscal_year=1998

AND t.fiscal_week_number IN (50, 51, 52)

AND t.day_number_in_week IN (6,7)

ORDER BY t.fiscal_month_desc, t.day_number_in_month;

 

SAMPLE 2:下例计算19984月每天的累积交易数量

 

SELECT UNIQUE t.day_number_in_month,

REGR_COUNT(s.amount_sold, s.quantity_sold)

OVER (PARTITION BY t.fiscal_month_number ORDER BY t.day_number_in_month)

"Regr_Count"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND t.fiscal_year = 1998 AND t.fiscal_month_number = 4;

 

SAMPLE 3:下例计算1998年每月销售量中已开发票数量和总数量的累积回归线决定系数

 

SELECT t.fiscal_month_number,

REGR_R2(SUM(s.amount_sold), SUM(s.quantity_sold))

OVER (ORDER BY t.fiscal_month_number) "Regr_R2"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND t.fiscal_year = 1998

GROUP BY t.fiscal_month_number

ORDER BY t.fiscal_month_number;

 

SAMPLE 4:下例计算199812月最后两周产品260的销售量中已开发票数量和总数量的累积平均值

 

SELECT t.day_number_in_month,

REGR_AVGY(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)

"Regr_AvgY",

REGR_AVGX(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)

"Regr_AvgX"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND s.prod_id = 260

AND t.fiscal_month_desc = '1998-12'

AND t.fiscal_week_number IN (51, 52)

ORDER BY t.day_number_in_month;

 

SAMPLE 5:下例计算产品26027019982月周末销售量中已开发票数量和总数量的累积REGR_SXY, REGR_SXX, and REGR_SYY统计值

 

SELECT t.day_number_in_month,

REGR_SXY(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxy",

REGR_SYY(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_syy",

REGR_SXX(s.amount_sold, s.quantity_sold)

OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxx"

FROM sales s, times t

WHERE s.time_id = t.time_id

AND prod_id IN (270, 260)

AND t.fiscal_month_desc = '1998-02'

AND t.day_number_in_week IN (6,7)

ORDER BY t.day_number_in_month;

转载于:https://www.cnblogs.com/huozhicheng/archive/2010/09/03/2533172.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac不装软件校验MD5和SHA1值

Mac 下校验下载的文件的方法是&#xff1a;打开 Terminal&#xff0c;即Mac 的命令行 MD5——md5&#xff1b;SHA1——shasum要校验Xcode6.4.dmg 的md5 与sha1 &#xff0c;只需要切换到对应的文件下&#xff0c;输入 &#xff1a;md5 Xcode6.4.dmg 就会输出对应的MD5 值shasum…

oracle索引使用例子,Oracle中利用函数索引处理数据倾斜案例

关于B-Tree、Bitmap、函数索引的相关内容请参考另一篇博文&#xff1a;Oracle中B-Tree、Bitmap和函数索引使用案例总结通常来说&#xff0c;索引选取的数据列最好为分散度高、选择性好。从索引树结构的角度看&#xff0c;列值都是分布在叶节点位置。这样&#xff0c;通过树结构…

[html] canvas生成图片有没有跨域问题?如果有如何解决?

[html] canvas生成图片有没有跨域问题&#xff1f;如果有如何解决&#xff1f; 前端设置 useCORS: true。后台配置允许跨域个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前…

什么是SSID/ESSID/BSSID

什么是SSID/ESSID/BSSID&#xff1f; SSID&#xff08;Service Set Identifier&#xff09;AP唯一的ID码&#xff0c;用来区分不同的网络&#xff0c;最多可以有32个字符&#xff0c;无线终端和AP的SSID必须相同方可通信。无线网卡设置了不同的SSID就可以进入不同网络&#xff…

Oracle数据文件scn不一致,数据文件SCN的一致性问题

1、数据库正常运行中&#xff0c;所有数据文件的SCN都是一致的吗&#xff1f;2、将一数据文件offline后&#xff0c;再将其online时&#xff0c;这个数据文件的SCN会前提吗&#xff1f;假如是&#xff0c;前提到的SCN是怎么确定的&#xff1f;1.数据库正常运行时&#xff0c;所…

[html] 如何垂直居中<img>?

[html] 如何垂直居中&#xff1f; 使用协助元素&#xff08;这里是i&#xff09;&#xff0c;作为img的相邻元素&#xff0c;同为inline-block的两元素相邻时增加vertical-align: middle个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; …

Acess 数据库 查询数据表结构等问题小记

今天一次性解决三个小问题&#xff1a; 问题1&#xff1a;本机打开Access数据库老是提示&#xff1a;“Windows 正在配置 Microsoft Office Professional Edition 2003&#xff0c;请稍候” 解决办法&#xff1a; 手动更改注册表步骤操作&#xff1a; 1. 单击“开始”&#xff…

集合计数 (容斥原理)

心路: { 想了个思路打出来硬干掉了样例&#xff0c;然后发现是错的....当时直接崩了...烦躁滴很...其实这个思路和题解大方向上是一样的&#xff0c;想到了用至少含k个的方案数减去含k1个的加上k2的。。。 然后再想怎么求至少含k个的方案数想到了让集合含这k个数然后随机组就行…

[html] 如何禁止手机端页面缩放?

[html] 如何禁止手机端页面缩放&#xff1f; <meta name"viewport" content"user-scalableno">个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前…

oracle 执行计划 ppt,oracle查看执行计划的方法

查看执行计划的方法Explain Plan For SQL不实际执行SQL语句&#xff0c;生成的计划未必是真实执行的计划必须要有plan_tableSQLPLUS AUTOTRACE除set autotrace traceonly explain外均实际执行SQL&#xff0c;但仍未必是真实计划必须要有plan_tableSQL TRACE需要启用10046戒者SQ…

《TCP/IP Sockets 编程》笔记5

第5章 发送和接收数据 There is nomagic: any programs that exchange information must agree on how that information will be encoded—represented as a sequence of bits—as well as which program sends what information when, and how the information received affe…

codeforces-1176 (div3)

打div3翻车了 A.第一个操作是除二&#xff0c;第二个操作视为两下操作之后除三&#xff0c;第三个操作视为三下操作之后除五&#xff0c;直接计算贡献 #include <map> #include <set> #include <ctime> #include <cmath> #include <queue> #incl…

oracle的工具cmd,数据库命令行工具DBCLI

转换日期有点问题。column trans_low format a20column trans_high format a20column data_default format a20SELECT--owner,-- table_name,column_name,data_type,data_length,nullable,num_distinct,density,sample_size,CASEWHEN data_type IN (CHAR, VARCHAR2)THE…

[html] 你能否画出一个0.5px的直线?

[html] 你能否画出一个0.5px的直线&#xff1f; 通过scale(0.5)来实现个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

VS2008 正式版 下载+ KEY 注册码

微软官方下载 http://www.microsoft.com/downloads/details.aspx?displaylangzh-cn&FamilyIDd95598d7-aa6e-4f24-82e3-81570c5384cb 中文 MSDN Library for Visual Studio 2008 http://www.microsoft.com/downloads/details.aspx?displaylangzh-cn&FamilyID6ff3bc60-…

微软CRM 2011 Beta 新功能之二:不同组织不同基本语言

微软CRM 4.0就开始提供对多语言的支持&#xff0c;在安装微软CRM 4.0时需要选择不同语言的安装程序&#xff0c;安装完成后该部署服务器上默认组织以及任何新建组织的基本语言跟安装程序的语言一致。虽然我们可以在服务器上安装多个语言包&#xff0c;使用户可以选择要使用的语…

php教育项目,六星教育:如何在PHP项目实战中取胜,获得腾讯等大厂的offer

原标题&#xff1a;六星教育&#xff1a;如何在PHP项目实战中取胜&#xff0c;获得腾讯等大厂的offer我们在进行PHP学习的时候&#xff0c;总会强调实战的重要性。事实也是如此&#xff0c;如果光知道理论知识&#xff0c;而缺乏实际项目的参与与运作&#xff0c;就会变得纸上谈…

[html] 制作一个页面时,需要兼容PC端和手机端,你是要分别做两个页面还是只做一个页面自适应?为什么?说说你的理由

[html] 制作一个页面时&#xff0c;需要兼容PC端和手机端&#xff0c;你是要分别做两个页面还是只做一个页面自适应&#xff1f;为什么&#xff1f;说说你的理由 两个页面 pc端布局和交互行为跟移动端不一样&#xff0c; 两个页面反而更好维护个人简介 我是歌谣&#xff0c;欢…

Silverlight学习笔记(一)——Silverlight够酷吗?

2007年底&#xff0c;微软推出了Silverlight1.0&#xff0c;在RIA领域小试牛刀。如今&#xff0c;Silverlight的成长速度已经超过了人们当初的想象。其一体化的编程方式、与JavaScript和Asp.Net的无缝集成功能&#xff0c;强大的应用层美工、设计工具&#xff0c;已经让众多开发…

方法有多少个参数才算多?

小弟有这样一个方法&#xff0c;按页大小和页索引查询产品&#xff0c;如下。 ///<summary>///获取产品///</summary>///<param name"manufacturerID">厂商ID&#xff0c;为null时不做查询条件。</param>///<param name"categoryID&…