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

Oracle 分析函数——数据分布函数及报表 函数CUME_DIST功能描述:计算一行在组中的相对位置, CUME_DIST 总是返回大于 0 、小于或等于 1 的数,该数表示该行在 N 行中的位置。例如,在一个 3 行的组中,返回的累计分布值为 1/3 、 2/3 、 3/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

8d1d9fd87cb12d7fdb401b7c6f5e1609.png

NTILE

功能描述:将一个组分为 " 表达式 " 的散列表示,例如,如果表达式 =4 ,则给组中的每一行分配一个数(从 1 到 4 ),如果组中有 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

a98d2d4f1865a5af07ca55460cefe922.png

PERCENT_RANK

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

SAMPLE :下例中如果 Khoo 的 salary 为 2900 ,则 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;

012583a6fc6356d39879dde7b76926d2.png

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

2221cf261fc73fc41ff1fdaff24c5ce4.png

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 :在下例中,对于部门 60 的 Percentile_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

8be4a5efad1cbfbbec17ab6966256a9c.png

总案例

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

e1a22eb42d5fbb0e16a5b5a909187838.png

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';

cc9841ebac0ff2036206df0569f7b41a.png

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 年最后三个星期中两种产品( 260 和 270 )在周末的销售量中已×××数量和总数量的累积斜率和回归线的截距

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 :下例计算 1998 年 4 月每天的累积交易数量

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 :下例计算 1998 年 12 月最后两周产品 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 :下例计算产品 260 和 270 在 1998 年 2 月周末销售量中已×××数量和总数量的累积 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;

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

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

相关文章

oracle ora 03137,今天遇到奇怪的ORA-03137错误(包含trc文件)

今天下午同事突然反映,打开一个用户数据的时候报错:ora-03114:未连接数据库很奇怪的错误信息,查看alert log文件系统在报错:2010/6/24 13:46:46 Thu Jun 24 13:46:46 2010Errors in file /u01/oracle/diag/rdbms/orcl/orcl/t…

redhat配置oracle yum源,Redhat5和6 YUM源配置的区别

一、概述随着各个软件版本的不断升级,我们需要掌握的软件特性也越来越多,技术的不断更新也促进了我们脑细胞的循环。 今天在配置RedHat6.3的yum源时也出现了一个有趣的事情,下面请听俺道来。二、问题处理问题源于哥们处,自己就搭建…

脚本自启动oracle,自动启动和关闭Oracle 脚本

配置完ASM实例后,每次启动oracle数据库服务器的时候要先启动ASM实例,然后启动数据库实例;关闭的时候,需要先关闭oracle数据库实例,然后关闭ASM实例;敲起命来来麻烦的很,因而改进了原来的shell脚…

php中fread()函数,php fread()函数

定义fread()函数用于读取文件。语法PHP fread()函数具有以下语法。fread(file,length)参数参数是否必须描述file需要。要读取的打开文件length需要。要读取的最大字节数返回值此函数返回读取的字符串,或失败时为FALSE。实例1/*http://www.manongjc.com/article/1800…

linux启动tongweb命令,linux7开机自启动东方通tongweb

自启动服务:可以通过把TongWeb设置为系统服务来实现。具体实现:以root用户进行操作,在/etc/init.d目录下编写TongWeb的服务脚本tongweb,用来控制TongWeb的启动和停止。脚本内容如下:#!/bin/bash## tongweb This shell …

linux默认的https端口,如何在Ubuntu 18.04 Bionic Beaver Linux上拒绝除HTTP端口80和HTTPS端口443之外的所有传入端口...

目的目的是启用UFW防火墙,拒绝所有传入端口,但是在Ubuntu 18.04 Bionic Beaver Linux上仅允许HTTP端口80和HTTPS端口443。操作系统和软件版本操作系统:-Ubuntu 18.04仿生海狸要求需要特权才能访问您的Ubuntu 18.04 Bionic Beaver。约定&#…

go 跨平台编译linux,golang 跨平台编译

只需要指定目标操作系统的平台和处理器架构即可:命令行方式因为不支持CGO,所以要禁用CGOSET CGO_ENABLED0 // 禁用CGOSET GOOSlinux // 目标平台是linuxSET GOARCHamd64 // 目标处理器架构是amd64然后再执行go build命令,得到的就是能够在Lin…

linux7 修改服务启动项目命令,centos7服务部署flask项目

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?centos7语言配置问题登录服务器,注意观察是否出现以下警告提示warning: setlocale: LC_CTYPE: cannot change locale (en_US.utf8): No such file or d…

虚拟机linux中怎样打开qt,虚拟机中在Centos 4.7中安装qt-x11-opensource-4.4.3

本人最近学习qt,把qt安装在了虚拟机下,用的是免费的Linux,qt是Linux下开发c不错的软件,经过了2天的奋战,终于把qt安装在了自己的机器上面,现在把安装步骤告诉大家,希望对你们安装错误的同志们有…

linux top p 乱码,将Linux top命令输入到指定文件时的乱码问题

根据需求,项目需要读取linux系统环境参数,所以需要将top命令的输出结果输入到文件中。用重定向命令如下:topresult.txt。用vi打开文件:viresult.txt。显示的根据需求,项目需要读取linux系统环境参数,所以需…

linux龙芯自动挂载u盘,Windows Subsystem for Linux (WSL)挂载移动硬盘U盘

WSL想通过移动硬盘处理一些数据,结果进去了无法发现移动硬盘,于是搜了好久也没有一个正确的解决办法,终于找到一个,现在贡献出来与大家共享。WSL比起linux挂载硬盘简单一些。而且windows本身自己的硬盘位ntfs格式,所以…

win10子linux如何重置密码,Win10如何使用Windows PowerShell命令重置本地账户密码

在win10系统中,都自带有本地账户,为了安全也会给本地商户设置密码,不过使用一段时间之后,想要重置本地账户密码,但是很多用户并不知道要如何操作,其实我们可以使用Windows PowerShell命令方式来实现&#x…

linux wine 性能,Wine 1.9.16 发布,改善 GDI 性能

Wine 1.9.16 最近发布下载,配备了大量的新功能,改进和错误修正。显着的更新包括在MacOS下能更好与64位二进制兼容性,提升JavaScript性能,对Direct3D的改进,在Direct3D更多的着色器指令,提升GDI性能&#xf…

linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies

0. 测试环境Linux 2.6.39 AT91SAM9G451. 定时器简单的测试例子#include #include MODULE_LICENSE("GPL");struct timer_list tm;static int num;static void func(){num;mod_timer(&tm, jiffies HZ);printk("Hello, timer :%d\n", num);}static int t…

二级考试c语言中 星号与字母 题型总结,2017年计算机二级考试C语言知识点归纳...

2017年计算机二级考试C语言知识点归纳计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。下面是2017年计算机二级考试…

c语言字符串查找子串并截取,如何搜索截取特定字符串?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼有如下文本:config KEXEC_COREboolconfig OPROFILEtristate "OProfile system profiling"depends on PROFILINGdepends on HAVE_OPROFILEselect RING_BUFFERselect RING_BUFFER_ALLOW_SWAPhelpOProfile is a …

c#语言输出字符串长度,C#获取字符串长度(string.Length)

字符串实际上是由多个字符组成的,字符串中的第一个字符使用字符串[0]即可得。[0]中的0称为下标。获取字符串中的第一个字符使用的下标是0,则字符串中最后一个字符的下标是字符串的长度减1。使用C#语言如果要获取字符串的长度,使用Length属性即可&#xf…

用栈实现计算器c语言报告,请问,用c语言做一个计算器 包括+-*/()的运算 用栈 该怎么做...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#define UINT unsigned intstruct LOGIC{UINT logic,site;};char *text"8*9*(87)12/6-4";int calc_exp(char *sz);int calc_part(int a,int b,UINT w);int main(int argc,char *argv[]){std::cout<st…

c语言sqrt多个重载函数,“sqrt”: 对重载函数的调用不明确——解决方法

#include#includeusing namespace std;int main(){int i,j,k,flag;i 2;while(i < 100){flag 1;k sqrt((double)i);j 2;while(j < k){if(i%j 0){flag 0;break;}j;}if(flag)cout<i;}getchar();return 0;}报错&#xff1a;“ sqrt ”&#xff1a;对重载函数的调用不…

c语言截图代码,截图代码 哪位大神帮我找一下错,截出来的图是这样子的

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼终于找到了&#xff0c;前段时间研究jpg的时候&#xff0c;顺便做的一个实验&#xff0c;直接输出bmp文件。参考了微软的一个很老的代码里的字节对齐。。但愿对你有帮助吧。#include #include // showdib.h 157行&#xff0c;字节对…