oracle分析函数等高级sqlWord下载.docx

上传人:b****6 文档编号:21524135 上传时间:2023-01-31 格式:DOCX 页数:30 大小:28.26KB
下载 相关 举报
oracle分析函数等高级sqlWord下载.docx_第1页
第1页 / 共30页
oracle分析函数等高级sqlWord下载.docx_第2页
第2页 / 共30页
oracle分析函数等高级sqlWord下载.docx_第3页
第3页 / 共30页
oracle分析函数等高级sqlWord下载.docx_第4页
第4页 / 共30页
oracle分析函数等高级sqlWord下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

oracle分析函数等高级sqlWord下载.docx

《oracle分析函数等高级sqlWord下载.docx》由会员分享,可在线阅读,更多相关《oracle分析函数等高级sqlWord下载.docx(30页珍藏版)》请在冰豆网上搜索。

oracle分析函数等高级sqlWord下载.docx

FROMemployees;

MANAGER_IDLAST_NAME 

HIRE_DATE 

SALARY 

C_MAVG

----------------------------------------------------------------

100Kochhar 

21-SEP-89 

17000 

17000

100DeHaan 

13-JAN-93 

15000

100Raphaely 

07-DEC-94 

11000

100Kaufling 

01-MAY-95 

7900

100Hartstein 

17-FEB-96 

13000

100Weiss 

18-JUL-96 

8000

100Russell 

01-OCT-96 

14000

.

CORR

返回一对表达式的相关系数,它是如下的缩写:

COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))

从统计上讲,相关性是变量之间关联的强度,变量之间的关联意味着在某种程度

上一个变量的值可由其它的值进行预测。

通过返回一个-1~1之间的一个数,相关

系数给出了关联的强度,0表示不相关。

下例返回1998年月销售收入和月单位销售的关系的累积系数(本例在SH用户下运行)

SELECT,

CORR(SUM,SUM)

OVER(ORDERBYasCUM_CORR

FROMsaless,timest

WHERE=ANDcalendar_year=1998

GROUPBY

ORDERBY;

CALENDAR_MONTH_NUMBER 

CUM_CORR

-------------------------------

1

1

3.2

4.5

5.4

6.8

7.3

8.9

9.6

10 

11.5

12.2

COVAR_POP 

返回一对表达式的总体协方差。

下例CUM_COVP返回定价和最小产品价格的累积总体协方差

SELECTproduct_id,supplier_id,

COVAR_POP(list_price,min_price)

OVER(ORDERBYproduct_id,supplier_id)ASCUM_COVP,

COVAR_SAMP(list_price,min_price)

OVER(ORDERBYproduct_id,supplier_id)ASCUM_COVS

FROMproduct_informationp

WHEREcategory_id=29

ORDERBYproduct_id,supplier_id;

PRODUCT_IDSUPPLIER_ID 

CUM_COVP 

CUM_COVS

-----------------------------------------

1774 

103088 

0

1775 

103087 

1794 

103096

1825 

103093 

2004 

103086 

2005 

1815

2416 

103088

COVAR_SAMP 

返回一对表达式的样本协方差

下例CUM_COVS返回定价和最小产品价格的累积样本协方差

COUNT

对一组内发生的事情进行累积计数,如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;

可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。

下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n+150]之间的行数,n表示当前行的薪水

例如,Philtanker的薪水2200,排在他之前的行中薪水大于等于2200-50的有1行,排在他之后的行中薪水小于等于2200+150的行没有,所以count计数值cnt3为2(包括自己当前行);

cnt2值相当于小于等于当前行的SALARY值的所有行数

SELECTlast_name,salary,COUNT(*)OVER()AScnt1,

COUNT(*)OVER(ORDERBYsalary)AScnt2,

COUNT(*)OVER(ORDERBYsalaryRANGEBETWEEN50PRECEDING

AND150FOLLOWING)AScnt3FROMemployees;

LAST_NAME 

CNT1 

CNT2 

CNT3

-----------------------------------------------------------------

Olson 

2100 

107 

3

Markle 

2200 

2

Philtanker 

2200 

Landry 

2400 

8

Gee 

Colmenares 

2500 

11 

10

Patel 

2500 

CUME_DIST

计算一行在组中的相对位置,CUME_DIST总是返回大于0、小于或等于1的数,该数表示该行在N行中的位置。

例如,在一个3行的组中,返回的累计分布值为1/3、2/3、3/3

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

SELECTjob_id,last_name,salary,CUME_DIST()

OVER(PARTITIONBYjob_idORDERBYsalary)AScume_dist

FROMemployees 

WHEREjob_idLIKE'

PU%'

;

JOB_ID 

CUME_DIST

-------------------------------------------------------

PU_CLERK 

.2

Himuro 

2600 

.4

Tobias 

2800 

.6

Baida 

2900 

.8

Khoo 

3100 

PU_MAN 

Raphaely 

11000 

DENSE_RANK

根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。

组内的数据按ORDERBY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。

每次ORDERBY表达式的值发生变化时,该序列也随之增加。

有同样值的行得到同样的数字序号(认为null时相等的)。

密集的序列返回的时没有间隔的数

下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与RANK函数的区别)

SELECT,,,DENSE_RANK()

OVER(PARTITIONBYORDERBYasdrank

FROMemployeese,departmentsd

WHERE=

ANDIN('

60'

'

90'

);

DEPARTMENT_IDLAST_NAME 

DRANK

----------------------------------------------------------

60Lorentz 

4200 

60Austin 

4800 

60Pataballa 

60Ernst 

6000 

60Hunold 

9000 

4

90Kochhar 

90DeHaan 

90King 

24000 

FIRST

从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录

下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;

LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值

SELECTlast_name,department_id,salary,

MIN(salary)KEEP(DENSE_RANKFIRSTORDERBYcommission_pct)

OVER(PARTITIONBYdepartment_id)"

Worst"

MAX(salary)KEEP(DENSE_RANKLASTORDERBYcommission_pct)

Best"

FROMemployees

WHEREdepartment_idin(20,80)

ORDERBYdepartment_id,salary;

DEPARTMENT_ID 

Worst 

Best

--------------------------------------------------------------------

Fay 

20 

6000 

13000

Hartstein 

13000 

Kumar 

80 

6100 

14000

Banda 

6200 

Johnson 

Ande 

6400 

Lee 

80 

6800 

Tuvault 

7000 

Sewall 

Marvins 

7200 

Bates 

7300 

FIRST_VALUE 

返回组中数据窗口的第一个值。

下面例子计算按部门分区按薪水排序的数据窗口的第一个值对应的名字,如果薪水的第一个值有多个,则从多个对应的名字中取缺省排序的第一个名字

SELECTdepartment_id,last_name,salary,FIRST_VALUE(last_name)

OVER(PARTITIONBYdepartment_idORDERBYsalaryASC)ASlowest_sal

WHEREdepartment_idin(20,30);

SALARYLOWEST_SAL

--------------------------------------------------------------

20Fay 

6000Fay

20Hartstein 

13000Fay

30Colmenares 

2500Colmenares

30Himuro 

2600Colmenares

30Tobias 

2800Colmenares

30Baida 

2900Colmenares

30Khoo 

3100Colmenares

30Raphaely 

11000Colmenares

LAG

可以访问结果集中的其它行而不用进行自连接。

它允许去处理游标,就好像游标是一个数组一样。

在给定组中可参考当前行之前的行,这样就可以从组中与当前行一起选择以前的行。

Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEAD

下面的例子中列prev_sal返回按hire_date排序的前1行的salary值

SELECTlast_name,hire_date,salary,

LAG(salary,1,0)OVER(ORDERBYhire_date)ASprev_sal

FROMemployees

WHEREjob_id='

PU_CLERK'

HIRE_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1