数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle 9i 分析函数参考手册


发布日期:2024年06月22日
 
Oracle 9i 分析函数参考手册

Oracle从开始提供分析函数分析函数用于计算基于组的某种聚合值它和聚合函数的不同之处是对于每个组返回多行而聚合函数对于每个组只返回一行

下面例子中使用的表来自Oracle自带的HR用户下的表如果没有安装该用户可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_mainsql来创建

少数几个例子需要访问SH用户下的表如果没有安装该用户可以在SYS用户下运行$ORACLE_HOME/demo/schema/sales_history/sh_mainsql来创建

如果未指明缺省是在HR用户下运行例子

开窗函数的的理解

开窗函数指定了分析函数工作的数据窗口大小这个数据窗口大小可能会随着行的变化而变化举例如下

over(order by salary) 按照salary排序进行累计order by是个默认的开窗函数

over(partition by deptno)按照部门分区

over(order by salary range between preceding and following)

每行对应的数据窗口是之前行幅度值不超过之后行幅度值不超过

over(order by salary rows between preceding and following)

每行对应的数据窗口是之前之后

over(order by salary rows between unbounded preceding and unbounded following)

每行对应的数据窗口是从第一行到最后一行等效

over(order by salary range between unbounded preceding and unbounded following)

主要参考资料《expert oneonone》 Tom Kyte《Oraclei SQL Reference》第

AVG

功能描述用于计算一个组和数据窗口内表达式的平均值

SAMPLE下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来

SELECT manager_id last_name hire_date salary

AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date

ROWS BETWEEN PRECEDING AND FOLLOWING) AS c_mavg

FROM employees;

MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG

Kochhar SEP

De Haan JAN

RaphaelyDEC

KauflingMAY

Hartstein FEB

Weiss JUL

Russell OCT

CORR

功能描述返回一对表达式的相关系数它是如下的缩写

COVAR_POP(exprexpr)/STDDEV_POP(expr)*STDDEV_POP(expr))从统计上讲相关性是变量之间关联的强度变量之间的关联意味着在某种程度上一个变量的值可由其它的值进行预测通过返回一个~之间的一个数 相关系数给出了关联的强度表示不相关

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

SELECT tcalendar_month_number

CORR (SUM(samount_sold) SUM(squantity_sold))

OVER (ORDER BY tcalendar_month_number) as CUM_CORR

FROM sales s times t

WHERE stime_id = ttime_id AND calendar_year =

GROUP BY tcalendar_month_number

ORDER BY tcalendar_month_number;

CALENDAR_MONTH_NUMBER CUM_CORR

COVAR_POP

功能描述返回一对表达式的总体协方差

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

SELECT product_id supplier_id

COVAR_POP(list_price min_price)

OVER (ORDER BY product_id supplier_id) AS CUM_COVP

COVAR_SAMP(list_price min_price)

OVER (ORDER BY product_id supplier_id) AS CUM_COVS

FROM product_information p

WHERE category_id =

ORDER BY product_id supplier_id;

PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS

COVAR_SAMP

功能描述返回一对表达式的样本协方差

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

SELECT product_id supplier_id

COVAR_POP(list_price min_price)

OVER (ORDER BY product_id supplier_id) AS CUM_COVP

COVAR_SAMP(list_price min_price)

OVER (ORDER BY product_id supplier_id) AS CUM_COVS

FROM product_information p

WHERE category_id =

ORDER BY product_id supplier_id;

PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS

COUNT

功能描述对一组内发生的事情进行累积计数如果指定*或一些非空常数count将对所有行计数如果指定一个表达式count返回表达式非空赋值的计数当有相同值出现时这些相等的值都会被纳入被计算的值可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数

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

例如Philtanker的薪水排在他之前的行中薪水大于等于的有排在他之后的行中薪水小于等于的行没有所以count计数值cnt(包括自己当前行)cnt值相当于小于等于当前行的SALARY值的所有行数

SELECT last_name salary COUNT(*) OVER () AS cnt

COUNT(*) OVER (ORDER BY salary) AS cnt

COUNT(*) OVER (ORDER BY salary RANGE BETWEEN PRECEDING

AND FOLLOWING) AS cnt FROM employees;

LAST_NAME SALARY CNT CNT CNT

Olson

Markle

Philtanker

Landry

Gee

Colmenares

Patel

CUME_DIST

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

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

SELECT job_id last_name salary CUME_DIST()

OVER (PARTITION BY job_id ORDER BY salary) AS cume_dist

FROM employeesWHERE job_id LIKE PU%;

JOB_ID LAST_NAME SALARYCUME_DIST

PU_CLERK Colmenares

PU_CLERK Himuro

PU_CLERK Tobias

PU_CLERK Baida

PU_CLERK Khoo

PU_MAN Raphaely

DENSE_RANK

功能描述根据ORDER BY子句中表达式的值从查询返回的每一行计算它们与其它行的相对位置组内的数据按ORDER BY子句排               

上一篇:用POI将Mysql数据导入到Excel中去

下一篇:Oracle强制删除用户