您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle分析函数
Oracle分析函数Oracle分析函数——函数列表SUM:该函数计算组中表达式的累积和MIN:在一个组中的数据窗口中查找表达式的最小值MAX:在一个组中的数据窗口中查找表达式的最大值AVG:用于计算一个组和数据窗口内表达式的平均值。COUNT:对一组内发生的事情进行累积计数-------------------------------------------------------------------------------------------------RANK:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置DENSE_RANK:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置FIRST:从DENSE_RANK返回的集合中取出排在最前面的一个值的行LAST:从DENSE_RANK返回的集合中取出排在最后面的一个值的行FIRST_VALUE:返回组中数据窗口的第一个值LAST_VALUE:返回组中数据窗口的最后一个值。LAG:可以访问结果集中的其它行而不用进行自连接LEAD:LEAD与LAG相反,LEAD可以访问组中当前行之后的行ROW_NUMBER:返回有序组中一行的偏移量,从而可用于按特定标准排序的行号-------------------------------------------------------------------------------------------------STDDEV:计算当前行关于组的标准偏离STDDEV_POP:该函数计算总体标准偏离,并返回总体变量的平方根STDDEV_SAMP:该函数计算累积样本标准偏离,并返回总体变量的平方根VAR_POP:该函数返回非空集合的总体变量(忽略null)VAR_SAMP:该函数返回非空集合的样本变量(忽略null)VARIANCE:如果表达式中行数为1,则返回0,如果表达式中行数大于1,则返回VAR_SAMPCOVAR_POP:返回一对表达式的总体协方差COVAR_SAMP:返回一对表达式的样本协方差CORR:返回一对表达式的相关系数-------------------------------------------------------------------------------------------------CUME_DIST:计算一行在组中的相对位置NTILE:将一个组分为表达式的散列表示PERCENT_RANK:和CUME_DIST(累积分配)函数类似PERCENTILE_DISC:返回一个与输入的分布百分比值相对应的数据值PERCENTILE_CONT:返回一个与输入的分布百分比值相对应的数据值RATIO_TO_REPORT:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比REGR_(LinearRegression)Functions:这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用-------------------------------------------------------------------------------------------------CUBE:按照OLAP的CUBE方式进行数据统计,即各个维度均需统计ROLLUP:SELECTdepartment_id,manager_id,employee_id,first_name||''||last_nameemployee_name,hire_date,salary,job_idFROMemployeesORDERBYdepartment_id,hire_dateOracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。Oracle从8.1.6开始提供分析函数。oracle分析函数的语法:function_name(arg1,arg2,...)over(partition-clauseorder-by-clausewindowingclause)说明:1.partition-clause数据记录集分组2.order-by-clause数据记录集排序3.windowingclause功能非常强大、比较复杂,定义分析函数在操作行的集合。有三种开窗方式:range、row、specifying。--Partitionby,按相应的值(manager_id)进行分组统计SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salary,AVG(salary)OVER(PARTITIONBYmanager_id)avg_salaryFROMemployees;--等同于上面SELECTa.manager_id,a.employee_name,a.hire_date,a.salary,b.avg_salaryFROM(SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salaryFROMemployees)a,(SELECTmanager_id,AVG(salary)avg_salaryFROMemployeesGROUPBYmanager_id)bWHEREa.manager_id=b.manager_idORDERBYa.manager_id--Orderby按相应的值(hire_date)进行排序并累计统计SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salary,AVG(salary)OVER(ORDERBYhire_date)FROMemployees;--PartitionbyOrderby首先按相应的值(manager_id,hire_date)排序,并按orderby的值(hire_date)进行累计统计SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salary,AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_date)FROMemployees;--PartitionbyOrderby首先按相应的值(manager_id,hire_date)排序,并按orderby的值(hire_date)进行累计统计--该平均值由当前员工和与之具有相同经理的前一个和后两个三者的平均数得来SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salary,AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_dateROWSBETWEEN1PRECEDINGAND2FOLLOWING)FROMemployees;--PartitionbyOrderby首先按相应的值(manager_id,hire_date)排序,并按orderby的值(hire_date)进行累计统计--该平均值由当前员工和与之具有相同经理,并且雇用时间在该员工时间之前的50天以内和在该员工之后的150天之内员工的薪水的平均值--range为取值范围,估计只有数字和日期能够进行取值了SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salary,AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_dateRANGEBETWEEN50PRECEDINGAND150FOLLOWING)FROMemployees;--PartitionbyOrderby首先按相应的值(manager_id,hire_date)排序,并按orderby的值(hire_date)进行累计统计--该平均值由当前员工和与之具有相同经理的平均值--每行对应的数据窗口是从第一行到最后一行SELECTmanager_id,first_name||''||last_nameemployee_name,hire_date,salary,AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_date)avg_salary_part_order,AVG(salary)OVER(PARTITIONBYmanager_id)avg_salary_order,AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_dateRANGEBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING)avg_salary_unbound1,--等同于仅partition时候的值AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_dateROWSBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING)avg_salary_unbound2--等同于上面FROMemployees;Oracle分析函数——SUM,AVG,MIN,MAX,COUNTSUM功能描述:该函数计算组中表达式的累积和。SAMPLE:下例计算同一经理下员工的薪水累积值MIN功能描述:在一个组中的数据窗口中查找表达式的最小值。SAMPLE:下面例子中dept_min返回当前行所在部门的最小薪水值MAX功能描述:在一个组中的数据窗口中查找表达式的最大值。SAMPLE:下面例子中dept_max返回当前行所在部门的最大薪水值AVG功能描述:用于计算一个组和数据窗口内表达式的平均值。SAMPLE:下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告SELECTdepartment_id,first_name||''||last_nameemployee_name,hire_date,salary,MIN(salary)OVER(PARTITIONBYdepartment_idorderbyhire_date)ASdept_min,MAX(salary)OVER(PARTITIONBYdepartment_idorderbyhire_date)ASdept_max,AVG(salary)OVER(PARTITIONBYdepartment_idorderbyhire_date)ASdept_avg,SUM(salary)OVER(PARTITIONBYdepartment_idorderbyhire_date)ASdept_sum/*,COUNT(*)OVER(ORDERBYsalary)AScount_by_salary,COUNT(*)OVER(ORDERBYsalaryRANGEBETWEEN50PRECEDINGAND150FOLLOWING)AScount_by_salary_range*/FROMemployeesCOUNT功能描述:对一组内发生的事情进行累积计数,如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。SAMPLE:下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n+150]之间的行数,n表示当前行的薪水例如,Phi
本文标题:Oracle分析函数
链接地址:https://www.777doc.com/doc-5322816 .html