Oracle 9i 分析函數(shù)參考手冊(cè)
Oracle從8.1.6開始提供分析函數(shù),分析函數(shù)用于計(jì)算基于組的某種聚合值,它和聚合函數(shù)的不同之處是對(duì)于每個(gè)組返回多行,而聚合函數(shù)對(duì)于每個(gè)組只返回一行。
下面例子中使用的表來自O(shè)racle自帶的HR用戶下的表,如果沒有安裝該用戶,可以在SYS用戶下運(yùn)行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql來創(chuàng)建。
少數(shù)幾個(gè)例子需要訪問SH用戶下的表,如果沒有安裝該用戶,可以在SYS用戶下運(yùn)行$ORACLE_HOME/demo/schema/sales_history/sh_main.sql來創(chuàng)建。
如果未指明缺省是在HR用戶下運(yùn)行例子。
開窗函數(shù)的的理解:
開窗函數(shù)指定了分析函數(shù)工作的數(shù)據(jù)窗口大小,這個(gè)數(shù)據(jù)窗口大小可能會(huì)隨著行的變化而變化,舉例如下:
over(order by salary) 按照salary排序進(jìn)行累計(jì),order by是個(gè)默認(rèn)的開窗函數(shù)
over(partition by deptno)按照部門分區(qū)
over(order by salary range between 50 preceding and 150 following)
每行對(duì)應(yīng)的數(shù)據(jù)窗口是之前行幅度值不超過50,之后行幅度值不超過150
over(order by salary rows between 50 preceding and 150 following)
每行對(duì)應(yīng)的數(shù)據(jù)窗口是之前50行,之后150行
over(order by salary rows between unbounded preceding and unbounded following)
每行對(duì)應(yīng)的數(shù)據(jù)窗口是從第一行到最后一行,等效:
over(order by salary range between unbounded preceding and unbounded following)
主要參考資料:《expert one-on-one》 Tom Kyte 《Oracle9i SQL Reference》第6章
AVG
功能描述:用于計(jì)算一個(gè)組和數(shù)據(jù)窗口內(nèi)表達(dá)式的平均值。
SAMPLE:下面的例子中列c_mavg計(jì)算員工表中每個(gè)員工的平均薪水報(bào)告,該平均值由當(dāng)前員工和與之具有相同經(jīng)理的前一個(gè)和后一個(gè)三者的平均數(shù)得來;
SELECT manager_id, last_name, hire_date, salary,
AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavg
FROM employees;
MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG
---------- ------------------------- --------- ---------- ----------
100 Kochhar 21-SEP-89 17000 17000
100 De Haan 13-JAN-93 17000 15000
100 Raphaely 07-DEC-94 11000 11966.6667
100 Kaufling 01-MAY-95 7900 10633.3333
100 Hartstein 17-FEB-96 13000 9633.33333
100 Weiss 18-JUL-96 8000 11666.6667
100 Russell 01-OCT-96 14000 11833.3333
.
.
.
CORR
功能描述:返回一對(duì)表達(dá)式的相關(guān)系數(shù),它是如下的縮寫:
COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))
從統(tǒng)計(jì)上講,相關(guān)性是變量之間關(guān)聯(lián)的強(qiáng)度,變量之間的關(guān)聯(lián)意味著在某種程度
上一個(gè)變量的值可由其它的值進(jìn)行預(yù)測(cè)。通過返回一個(gè)-1~1之間的一個(gè)數(shù), 相關(guān)
系數(shù)給出了關(guān)聯(lián)的強(qiáng)度,0表示不相關(guān)。
SAMPLE:下例返回1998年月銷售收入和月單位銷售的關(guān)系的累積系數(shù)(本例在SH用戶下運(yùn)行)
SELECT t.calendar_month_number,
CORR (SUM(s.amount_sold), SUM(s.quantity_sold))
OVER (ORDER BY t.calendar_month_number) as CUM_CORR
FROM sales s, times t
WHERE s.time_id = t.time_id AND calendar_year = 1998
GROUP BY t.calendar_month_number
ORDER BY t.calendar_month_number;
|
|