深圳网络做网站app开发费用大概多少
news/
2025/10/5 22:57:34/
文章来源:
深圳网络做网站,app开发费用大概多少,手机网站建设教程,2345浏览器影视大全22/06/2005 12:22 FPOracle从8.1.6开始提供分析函数#xff0c;分析函数用于计算基于组的某种聚合值#xff0c;它和聚合函数的不同之处是对于每个组返回多行#xff0c;而聚合函数对于每个组只返回一行。下面例子中使用的表来自Oracle自带的HR用户下的表#xff0c;如果没…22/06/2005 12:22 FPOracle从8.1.6开始提供分析函数分析函数用于计算基于组的某种聚合值它和聚合函数的不同之处是对于每个组返回多行而聚合函数对于每个组只返回一行。下面例子中使用的表来自Oracle自带的HR用户下的表如果没有安装该用户可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。本文如果未指明缺省是在HR用户下运行例子。开窗函数的的理解开窗函数指定了分析函数工作的数据窗口大小这个数据窗口大小可能会随着行的变化而变化举例如下over(order by salary) 按照salary排序进行累计order by是个默认的开窗函数over(partition by deptno)按照部门分区over(order by salary range between 50 preceding and 150 following)每行对应的数据窗口是之前行幅度值不超过50之后行幅度值不超过150over(order by salary rows between 50 preceding and 150 following)每行对应的数据窗口是之前50行之后150行over(order by salary rows between unbounded preceding and unbounded following)每行对应的数据窗口是从第一行到最后一行等效over(order by salary range between unbounded preceding and unbounded following)主要参考资料《expert one-on-one》 Tom Kyte 《Oracle9i SQL Reference》第6章AVG功能描述用于计算一个组和数据窗口内表达式的平均值。SAMPLE下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来SELECT manager_id, last_name, hire_date, salary,AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_dateROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavgFROM employees;MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG---------- ------------------------- --------- ---------- ----------100 Kochhar 21-SEP-89 17000 17000100 De Haan 13-JAN-93 17000 15000100 Raphaely 07-DEC-94 11000 11966.6667100 Kaufling 01-MAY-95 7900 10633.3333100 Hartstein 17-FEB-96 13000 9633.33333100 Weiss 18-JUL-96 8000 11666.6667100 Russell 01-OCT-96 14000 11833.3333CORR功能描述返回一对表达式的相关系数它是如下的缩写COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))从统计上讲相关性是变量之间关联的强度变量之间的关联意味着在某种程度上一个变量的值可由其它的值进行预测。通过返回一个-1~1之间的一个数, 相关系数给出了关联的强度0表示不相关。SAMPLE下例返回1998年月销售收入和月单位销售的关系的累积系数(本例在SH用户下运行)SELECT t.calendar_month_number,CORR (SUM(s.amount_sold), SUM(s.quantity_sold))OVER (ORDER BY t.calendar_month_number) as CUM_CORRFROM sales s, times tWHERE s.time_id t.time_id AND calendar_year 1998GROUP BY t.calendar_month_numberORDER BY t.calendar_month_number;CALENDAR_MONTH_NUMBER CUM_CORR--------------------- ----------12 13 .9943093824 .8520408755 .8466522046 .8712506287 .9100298038 .9175563999 .92015435610 .8672025111 .84486476512 .903542662COVAR_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_COVSFROM product_information pWHERE category_id 29ORDER BY product_id, supplier_id;PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS---------- ----------- ---------- ----------1774 103088 01775 103087 1473.25 2946.51794 103096 1702.77778 2554.166671825 103093 1926.25 2568.333332004 103086 1591.4 1989.252005 103086 1512.5 18152416 103088 1475.97959 1721.97619..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_COVSFROM product_information pWHERE category_id 29ORDER BY product_id, supplier_id;PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS---------- ----------- ---------- ----------1774 103088 01775 103087 1473.25 2946.51794 103096 1702.77778 2554.166671825 103093 1926.25 2568.333332004 103086 1591.4 1989.252005 103086 1512.5 18152416 103088 1475.97959 1721.97619..COUNT功能描述对一组内发生的事情进行累积计数如果指定*或一些非空常数count将对所有行计数如果指定一个表达式count返回表达式非空赋值的计数当有相同值出现时这些相等的值都会被纳入被计算的值可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。SAMPLE下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n150]之间的行数n表示当前行的薪水例如Philtanker的薪水2200排在他之前的行中薪水大于等于2200-50的有1行排在他之后的行中薪水小于等于2200150的行没有所以count计数值cnt3为2(包括自己当前行)cnt2值相当于小于等于当前行的SALARY值的所有行数SELECT last_name, salary, COUNT(*) OVER () AS cnt1,COUNT(*) OVER (ORDER BY salary) AS cnt2,COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDINGAND 150 FOLLOWING) AS cnt3 FROM employees;LAST_NAME SALARY CNT1 CNT2 CNT3------------------------- ---------- ---------- ---------- ----------Olson 2100 107 1 3Markle 2200 107 3 2Philtanker 2200 107 3 2Landry 2400 107 5 8Gee 2400 107 5 8Colmenares 2500 107 11 10Patel 2500 107 11 10..CUME_DIST功能描述计算一行在组中的相对位置CUME_DIST总是返回大于0、小于或等于1的数该数表示该行在N行中的位置。例如在一个3行的组中返回的累计分布值为1/3、2/3、3/3SAMPLE下例中计算每个工种的员工按薪水排序依次累积出现的分布百分比SELECT job_id, last_name, salary, CUME_DIST()OVER (PARTITION BY job_id ORDER BY salary) AS cume_distFROM employees WHERE job_id LIKE PU%;JOB_ID LAST_NAME SALARY CUME_DIST---------- ------------------------- ---------- ----------PU_CLERK Colmenares 2500 .2PU_CLERK Himuro 2600 .4PU_CLERK Tobias 2800 .6PU_CLERK Baida 2900 .8PU_CLERK Khoo 3100 1PU_MAN Raphaely 11000 1DENSE_RANK功能描述根据ORDER BY子句中表达式的值从查询返回的每一行计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序然后给每一行赋一个号从而形成一个序列该序列从1开始往后累加。每次ORDER BY表达式的值发生变化时该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。密集的序列返回的时没有间隔的数SAMPLE下例中计算每个员工按部门分区再按薪水排序依次出现的序列号(注意与RANK函数的区别)SELECT d.department_id , e.last_name, e.salary, DENSE_RANK()OVER (PARTITION BY e.department_id ORDER BY e.salary) as drankFROM employees e, departments dWHERE e.department_id d.department_idAND d.department_id IN (60, 90);DEPARTMENT_ID LAST_NAME SALARY DRANK------------- ------------------------- ---------- ----------60 Lorentz 4200 160 Austin 4800 260 Pataballa 4800 260 Ernst 6000 360 Hunold 9000 490 Kochhar 17000 190 De Haan 17000 190 King 24000 2FIRST功能描述从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行因为值可能相等)因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE下面例子中DENSE_RANK按部门分区再按佣金commission_pct排序FIRST取出佣金最低的对应的所有行然后前面的MAX函数从这个集合中取出薪水最低的值LAST取出佣金最高的对应的所有行然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name, department_id, salary,MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)OVER (PARTITION BY department_id) Worst,MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)OVER (PARTITION BY department_id) BestFROM employeesWHERE department_id in (20,80)ORDER BY department_id, salary;LAST_NAME DEPARTMENT_ID SALARY Worst Best------------------------- ------------- ---------- ---------- ----------Fay 20 6000 6000 13000Hartstein 20 13000 6000 13000Kumar 80 6100 6100 14000Banda 80 6200 6100 14000Johnson 80 6200 6100 14000Ande 80 6400 6100 14000Lee 80 6800 6100 14000Tuvault 80 7000 6100 14000Sewall 80 7000 6100 14000Marvins 80 7200 6100 14000Bates 80 7300 6100 14000...FIRST_VALUE功能描述返回组中数据窗口的第一个值。SAMPLE下面例子计算按部门分区按薪水排序的数据窗口的第一个值对应的名字如果薪水的第一个值有多个则从多个对应的名字中取缺省排序的第一个名字SELECT department_id, last_name, salary, FIRST_VALUE(last_name)OVER (PARTITION BY department_id ORDER BY salary ASC ) AS lowest_salFROM employeesWHERE department_id in(20,30);DEPARTMENT_ID LAST_NAME SALARY LOWEST_SAL------------- ------------------------- ---------- --------------20 Fay 6000 Fay20 Hartstein 13000 Fay30 Colmenares 2500 Colmenares30 Himuro 2600 Colmenares30 Tobias 2800 Colmenares30 Baida 2900 Colmenares30 Khoo 3100 Colmenares30 Raphaely 11000 ColmenaresLAG功能描述可以访问结果集中的其它行而不用进行自连接。它允许去处理游标就好像游标是一个数组一样。在给定组中可参考当前行之前的行这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数其默认值为1若索引超出窗口的范围就返回默认值(默认返回的是组中第一行)其相反的函数是LEADSAMPLE下面的例子中列prev_sal返回按hire_date排序的前1行的salary值SELECT last_name, hire_date, salary,LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_salFROM employeesWHERE job_id PU_CLERK;LAST_NAME HIRE_DATE SALARY PREV_SAL------------------------- ---------- ---------- ----------Khoo 18-5月 -95 3100 0Tobias 24-7月 -97 2800 3100Baida 24-12月-97 2900 2800Himuro 15-11月-98 2600 2900Colmenares 10-8月 -99 2500 2600LAST功能描述从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行因为值可能相等)因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE下面例子中DENSE_RANK按部门分区再按佣金commission_pct排序FIRST取出佣金最低的对应的所有行然后前面的MAX函数从这个集合中取出薪水最低的值LAST取出佣金最高的对应的所有行然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name, department_id, salary,MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)OVER (PARTITION BY department_id) Worst,MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)OVER (PARTITION BY department_id) BestFROM employeesWHERE department_id in (20,80)ORDER BY department_id, salary;LAST_NAME DEPARTMENT_ID SALARY Worst Best------------------------- ------------- ---------- ---------- ----------Fay 20 6000 6000 13000Hartstein 20 13000 6000 13000Kumar 80 6100 6100 14000Banda 80 6200 6100 14000Johnson 80 6200 6100 14000Ande 80 6400 6100 14000Lee 80 6800 6100 14000Tuvault 80 7000 6100 14000Sewall 80 7000 6100 14000Marvins 80 7200 6100 14000Bates 80 7300 6100 14000.LAST_VALUE功能描述返回组中数据窗口的最后一个值。SAMPLE下面例子计算按部门分区按薪水排序的数据窗口的最后一个值对应的名字如果薪水的最后一个值有多个则从多个对应的名字中取缺省排序的最后一个名字SELECT department_id, last_name, salary, LAST_VALUE(last_name)OVER(PARTITION BY department_id ORDER BY salary) AS highest_salFROM employeesWHERE department_id in(20,30);DEPARTMENT_ID LAST_NAME SALARY HIGHEST_SAL------------- ------------------------- ---------- ------------20 Fay 6000 Fay20 Hartstein 13000 Hartstein30 Colmenares 2500 Colmenares30 Himuro 2600 Himuro30 Tobias 2800 Tobias30 Baida 2900 Baida30 Khoo 3100 Khoo30 Raphaely 11000 RaphaelyLEAD功能描述LEAD与LAG相反LEAD可以访问组中当前行之后的行。Offset是一个正整数其默认值为1若索引超出窗口的范围就返回默认值(默认返回的是组中第一行)SAMPLE下面的例子中每行的NextHired返回按hire_date排序的下一行的hire_date值SELECT last_name, hire_date,LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS NextHiredFROM employees WHERE department_id 30;LAST_NAME HIRE_DATE NextHired------------------------- --------- ---------Raphaely 07-DEC-94 18-MAY-95Khoo 18-MAY-95 24-JUL-97Tobias 24-JUL-97 24-DEC-97Baida 24-DEC-97 15-NOV-98Himuro 15-NOV-98 10-AUG-99Colmenares 10-AUG-99MAX功能描述在一个组中的数据窗口中查找表达式的最大值。SAMPLE下面例子中dept_max返回当前行所在部门的最大薪水值SELECT department_id, last_name, salary,MAX(salary) OVER (PARTITION BY department_id) AS dept_maxFROM employees WHERE department_id in (10,20,30);DEPARTMENT_ID LAST_NAME SALARY DEPT_MAX------------- ------------------------- ---------- ----------10 Whalen 4400 440020 Hartstein 13000 1300020 Fay 6000 1300030 Raphaely 11000 1100030 Khoo 3100 1100030 Baida 2900 1100030 Tobias 2800 1100030 Himuro 2600 1100030 Colmenares 2500 11000MIN功能描述在一个组中的数据窗口中查找表达式的最小值。SAMPLE下面例子中dept_min返回当前行所在部门的最小薪水值SELECT department_id, last_name, salary,MIN(salary) OVER (PARTITION BY department_id) AS dept_minFROM employees WHERE department_id in (10,20,30);DEPARTMENT_ID LAST_NAME SALARY DEPT_MIN------------- ------------------------- ---------- ----------10 Whalen 4400 440020 Hartstein 13000 600020 Fay 6000 600030 Raphaely 11000 250030 Khoo 3100 250030 Baida 2900 250030 Tobias 2800 250030 Himuro 2600 250030 Colmenares 2500 2500NTILE功能描述将一个组分为表达式的散列表示例如如果表达式4则给组中的每一行分配一个数(从1到4)如果组中有20行则给前5行分配1给下5行分配2等等。如果组的基数不能由表达式值平均分开则对这些行进行分配时组中就没有任何percentile的行数比其它percentile的行数超过一行最低的percentile是那些拥有额外行的percentile。例如若表达式4行数21则percentile1的有5行percentile2的有5行等等。SAMPLE下例中把6行数据分为4份SELECT last_name, salary,NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM employeesWHERE department_id 100;LAST_NAME SALARY QUARTILE------------------------- ---------- ----------Greenberg 12000 1Faviet 9000 1Chen 8200 2Urman 7800 2Sciarra 7700 3Popp 6900 4PERCENT_RANK功能描述和CUME_DIST(累积分配)函数类似对于一个组中给定的行来说在计算那行的序号时先减1然后除以n-1(n为组中所有的行数)。该函数总是返回01(包括1)之间的数。SAMPLE下例中如果Khoo的salary为2900则pr值为0.6因为RANK函数对于等值的返回序列值是一样的SELECT department_id, last_name, salary,PERCENT_RANK()OVER (PARTITION BY department_id ORDER BY salary) AS prFROM employeesWHERE department_id 50ORDER BY department_id,salary;DEPARTMENT_ID LAST_NAME SALARY PR------------- ------------------------- ---------- ----------10 Whalen 4400 020 Fay 6000 020 Hartstein 13000 130 Colmenares 2500 030 Himuro 2600 0.230 Tobias 2800 0.430 Baida 2900 0.630 Khoo 3100 0.830 Raphaely 11000 140 Mavris 6500 0PERCENTILE_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的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE在下例中对于部门60的Percentile_Cont值计算如下P0.7 N5 RN 1 (P*(N-1)1(0.7*(5-1))3.8 CRN CEIL(3.8)4FRN FLOOR(3.8)3(4 - 3.8)* 4800 (3.8 - 3) * 6000 5760SELECT last_name, salary, department_id,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_RankFROM employees WHERE department_id IN (30, 60);LAST_NAME SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank------------------------- ---------- ------------- --------------- ------------Colmenares 2500 30 3000 0Himuro 2600 30 3000 0.2Tobias 2800 30 3000 0.4Baida 2900 30 3000 0.6Khoo 3100 30 3000 0.8Raphaely 11000 30 3000 1Lorentz 4200 60 5760 0Austin 4800 60 5760 0.25Pataballa 4800 60 5760 0.25Ernst 6000 60 5760 0.75Hunold 9000 60 5760 1PERCENTILE_DISC功能描述返回一个与输入的分布百分比值相对应的数据值分布百分比的计算方法见函数CUME_DIST如果没有正好对应的数据值就取大于该分布值的下一个值。注意本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE下例中0.7的分布值在部门30中没有对应的Cume_Dist值所以就取下一个分布值0.83333333所对应的SALARY来替代SELECT last_name, salary, department_id,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_DistFROM employeesWHERE department_id in (30, 60);LAST_NAME SALARY DEPARTMENT_ID Percentile_Disc Cume_Dist------------------------- ---------- ------------- --------------- ----------Colmenares 2500 30 3100 .166666667Himuro 2600 30 3100 .333333333Tobias 2800 30 3100 .5Baida 2900 30 3100 .666666667Khoo 3100 30 3100 .833333333Raphaely 11000 30 3100 1Lorentz 4200 60 6000 .2Austin 4800 60 6000 .6Pataballa 4800 60 6000 .6Ernst 6000 60 6000 .8Hunold 9000 60 6000 1RANK功能描述根据ORDER BY子句中表达式的值从查询返回的每一行计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序然后给每一行赋一个号从而形成一个序列该序列从1开始往后累加。每次ORDER BY表达式的值发生变化时该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而如果两行的确得到同样的排序则序数将随后跳跃。若两行序数为1则没有序数2序列将给组中的下一行分配值3DENSE_RANK则没有任何跳跃。SAMPLE下例中计算每个员工按部门分区再按薪水排序依次出现的序列号(注意与DENSE_RANK函数的区别)SELECT d.department_id , e.last_name, e.salary, RANK()OVER (PARTITION BY e.department_id ORDER BY e.salary) as drankFROM employees e, departments dWHERE e.department_id d.department_idAND d.department_id IN (60, 90);DEPARTMENT_ID LAST_NAME SALARY DRANK------------- ------------------------- ---------- ----------60 Lorentz 4200 160 Austin 4800 260 Pataballa 4800 260 Ernst 6000 460 Hunold 9000 590 Kochhar 17000 190 De Haan 17000 190 King 24000 3RATIO_TO_REPORT功能描述该函数计算expression/(sum(expression))的值它给出相对于总数的百分比即当前行对sum(expression)的贡献。SAMPLE下例计算每个员工的工资占该类员工总工资的百分比SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rrFROM employeesWHERE job_id PU_CLERK;LAST_NAME SALARY RR------------------------- ---------- ----------Khoo 3100 .223021583Baida 2900 .208633094Tobias 2800 .201438849Himuro 2600 .18705036Colmenares 2500 .179856115REGR_ (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 NULLIf VAR_POP(expr1) 0 and VAR_POP(expr2) ! 0 then return 1If VAR_POP(expr1) 0 and VAR_POP(expr2 ! 0 thenreturn 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_ICPTFROM sales s, times tWHERE s.time_id t.time_idAND s.prod_id IN (270, 260)AND t.fiscal_year1998AND 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;Month Day CUM_SLOPE CUM_ICPT---------- ---------- ---------- ----------12 12 -68 187212 12 -68 187212 13 -20.244898 1254.3673512 13 -20.244898 1254.3673512 19 -18.826087 128712 20 62.4561404 125.2865512 20 62.4561404 125.2865512 20 62.4561404 125.2865512 20 62.4561404 125.2865512 26 67.2658228 58.971231312 26 67.2658228 58.971231312 27 37.5245541 284.95822112 27 37.5245541 284.95822112 27 37.5245541 284.958221SAMPLE 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_CountFROM sales s, times tWHERE s.time_id t.time_idAND t.fiscal_year 1998 AND t.fiscal_month_number 4;DAY_NUMBER_IN_MONTH Regr_Count------------------- ----------1 8252 16503 24754 3300...26 2145030 22200SAMPLE 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_R2FROM sales s, times tWHERE s.time_id t.time_idAND t.fiscal_year 1998GROUP BY t.fiscal_month_numberORDER BY t.fiscal_month_number;FISCAL_MONTH_NUMBER Regr_R2------------------- ----------12 13 .9273729844 .8070199725 .9327455676 .946828617 .9653420118 .9557680759 .95954261810 .93861857511 .88093141512 .882769189SAMPLE 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_AvgXFROM sales s, times tWHERE s.time_id t.time_idAND s.prod_id 260AND t.fiscal_month_desc 1998-12AND t.fiscal_week_number IN (51, 52)ORDER BY t.day_number_in_month;DAY_NUMBER_IN_MONTH Regr_AvgY Regr_AvgX------------------- ---------- ----------14 882 24.514 882 24.515 801 22.2515 801 22.2516 777.6 21.618 642.857143 17.857142918 642.857143 17.857142920 589.5 16.37521 544 15.111111122 592.363636 16.454545522 592.363636 16.454545524 553.846154 15.384615424 553.846154 15.384615426 522 14.527 578.4 16.0666667SAMPLE 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_sxxFROM sales s, times tWHERE s.time_id t.time_idAND prod_id IN (270, 260)AND t.fiscal_month_desc 1998-02AND t.day_number_in_week IN (6,7)ORDER BY t.day_number_in_month;DAY_NUMBER_IN_MONTH Regr_sxy Regr_syy Regr_sxx------------------- ---------- ---------- ----------1 18870.4 2116198.4 258.41 18870.4 2116198.4 258.41 18870.4 2116198.4 258.41 18870.4 2116198.4 258.47 18870.4 2116198.4 258.48 18870.4 2116198.4 258.414 18870.4 2116198.4 258.415 18870.4 2116198.4 258.421 18870.4 2116198.4 258.422 18870.4 2116198.4 258.4ROW_NUMBER功能描述返回有序组中一行的偏移量从而可用于按特定标准排序的行号。SAMPLE下例返回每个员工再在每个部门中按员工号排序后的顺序号SELECT department_id, last_name, employee_id, ROW_NUMBER()OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_idFROM employeesWHERE department_id 50;DEPARTMENT_ID LAST_NAME EMPLOYEE_ID EMP_ID------------- ------------------------- ----------- ----------10 Whalen 200 120 Hartstein 201 120 Fay 202 230 Raphaely 114 130 Khoo 115 230 Baida 116 330 Tobias 117 430 Himuro 118 530 Colmenares 119 640 Mavris 203 1STDDEV功能描述计算当前行关于组的标准偏离。(Standard Deviation)SAMPLE下例返回部门30按雇佣日期排序的薪水值的累积标准偏离SELECT last_name, hire_date,salary,STDDEV(salary) OVER (ORDER BY hire_date) StdDevFROM employeesWHERE department_id 30;LAST_NAME HIRE_DATE SALARY StdDev------------------------- ---------- ---------- ----------Raphaely 07-12月-94 11000 0Khoo 18-5月 -95 3100 5586.14357Tobias 24-7月 -97 2800 4650.0896Baida 24-12月-97 2900 4035.26125Himuro 15-11月-98 2600 3649.2465Colmenares 10-8月 -99 2500 3362.58829STDDEV_POP功能描述该函数计算总体标准偏离并返回总体变量的平方根其返回值与VAR_POP函数的平方根相同。(Standard DeviationPopulation)SAMPLE下例返回部门20、30、60的薪水值的总体标准偏差SELECT department_id, last_name, salary,STDDEV_POP(salary) OVER (PARTITION BY department_id) AS pop_stdFROM employeesWHERE department_id in (20,30,60);DEPARTMENT_ID LAST_NAME SALARY POP_STD------------- ------------------------- ---------- ----------20 Hartstein 13000 350020 Fay 6000 350030 Raphaely 11000 3069.609130 Khoo 3100 3069.609130 Baida 2900 3069.609130 Colmenares 2500 3069.609130 Himuro 2600 3069.609130 Tobias 2800 3069.609160 Hunold 9000 1722.3240160 Ernst 6000 1722.3240160 Austin 4800 1722.3240160 Pataballa 4800 1722.3240160 Lorentz 4200 1722.32401STDDEV_SAMP功能描述 该函数计算累积样本标准偏离并返回总体变量的平方根其返回值与VAR_POP函数的平方根相同。(Standard DeviationSample)SAMPLE下例返回部门20、30、60的薪水值的样本标准偏差SELECT department_id, last_name, hire_date, salary,STDDEV_SAMP(salary) OVER(PARTITION BY department_id ORDER BY hire_dateROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdevFROM employeesWHERE department_id in (20,30,60);DEPARTMENT_ID LAST_NAME HIRE_DATE SALARY CUM_SDEV------------- ------------------------- ---------- ---------- ----------20 Hartstein 17-2月 -96 1300020 Fay 17-8月 -97 6000 4949.7474730 Raphaely 07-12月-94 1100030 Khoo 18-5月 -95 3100 5586.1435730 Tobias 24-7月 -97 2800 4650.089630 Baida 24-12月-97 2900 4035.2612530 Himuro 15-11月-98 2600 3649.246530 Colmenares 10-8月 -99 2500 3362.5882960 Hunold 03-1月 -90 900060 Ernst 21-5月 -91 6000 2121.3203460 Austin 25-6月 -97 4800 2163.3307760 Pataballa 05-2月 -98 4800 1982.4227660 Lorentz 07-2月 -99 4200 1925.61678SUM功能描述该函数计算组中表达式的累积和。SAMPLE下例计算同一经理下员工的薪水累积值SELECT manager_id, last_name, salary,SUM (salary) OVER (PARTITION BY manager_id ORDER BY salaryRANGE UNBOUNDED PRECEDING) l_csumFROM employeesWHERE manager_id in (101,103,108);MANAGER_ID LAST_NAME SALARY L_CSUM---------- ------------------------- ---------- ----------101 Whalen 4400 4400101 Mavris 6500 10900101 Baer 10000 20900101 Greenberg 12000 44900101 Higgins 12000 44900103 Lorentz 4200 4200103 Austin 4800 13800103 Pataballa 4800 13800103 Ernst 6000 19800108 Popp 6900 6900108 Sciarra 7700 14600108 Urman 7800 22400108 Chen 8200 30600108 Faviet 9000 39600VAR_POP功能描述(Variance Population)该函数返回非空集合的总体变量(忽略null)VAR_POP进行如下计算(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)SAMPLE下例计算1998年每月销售的累积总体和样本变量(本例在SH用户下运行)SELECT t.calendar_month_desc,VAR_POP(SUM(s.amount_sold))OVER (ORDER BY t.calendar_month_desc) Var_Pop,VAR_SAMP(SUM(s.amount_sold))OVER (ORDER BY t.calendar_month_desc) Var_SampFROM sales s, times tWHERE s.time_id t.time_id AND t.calendar_year 1998GROUP BY t.calendar_month_desc;CALENDAR Var_Pop Var_Samp-------- ---------- ----------1998-01 01998-02 6.1321E11 1.2264E121998-03 4.7058E11 7.0587E111998-04 4.6929E11 6.2572E111998-05 1.5524E12 1.9405E121998-06 2.3711E12 2.8453E121998-07 3.7464E12 4.3708E121998-08 3.7852E12 4.3260E121998-09 3.5753E12 4.0222E121998-10 3.4343E12 3.8159E121998-11 3.4245E12 3.7669E121998-12 4.8937E12 5.3386E12VAR_SAMP功能描述(Variance Sample)该函数返回非空集合的样本变量(忽略null)VAR_POP进行如下计算(SUM(expr*expr)-SUM(expr)*SUM(expr)/COUNT(expr))/(COUNT(expr)-1)SAMPLE下例计算1998年每月销售的累积总体和样本变量SELECT t.calendar_month_desc,VAR_POP(SUM(s.amount_sold))OVER (ORDER BY t.calendar_month_desc) Var_Pop,VAR_SAMP(SUM(s.amount_sold))OVER (ORDER BY t.calendar_month_desc) Var_SampFROM sales s, times tWHERE s.time_id t.time_id AND t.calendar_year 1998GROUP BY t.calendar_month_desc;CALENDAR Var_Pop Var_Samp-------- ---------- ----------1998-01 01998-02 6.1321E11 1.2264E121998-03 4.7058E11 7.0587E111998-04 4.6929E11 6.2572E111998-05 1.5524E12 1.9405E121998-06 2.3711E12 2.8453E121998-07 3.7464E12 4.3708E121998-08 3.7852E12 4.3260E121998-09 3.5753E12 4.0222E121998-10 3.4343E12 3.8159E121998-11 3.4245E12 3.7669E121998-12 4.8937E12 5.3386E12VARIANCE功能描述该函数返回表达式的变量Oracle计算该变量如下如果表达式中行数为1则返回0如果表达式中行数大于1则返回VAR_SAMPSAMPLE下例返回部门30按雇佣日期排序的薪水值的累积变化SELECT last_name, salary, VARIANCE(salary)OVER (ORDER BY hire_date) VarianceFROM employeesWHERE department_id 30;LAST_NAME SALARY Variance------------------------- ---------- ----------Raphaely 11000 0Khoo 3100 31205000Tobias 2800 21623333.3Baida 2900 16283333.3Himuro 2600 13317000Colmenares 2500 11307000连续求和问题select name,sum(cnt) over(order by rownum) from t1;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928820.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!