【正文】
ength) DUMP函數(shù)以fmt指定的內(nèi)部數(shù)字格式返回一個(gè)VARCHAR2類型的值 SQL col global_name for a30 SQL col dump_string for a50 SQL set lin 200 SQL select global_name,dump(global_name,1017,8,5) dump_string from global_name。 LE 啊 59. UID 返回標(biāo)識(shí)當(dāng)前用戶的唯一整數(shù) SQL show user USER 為GAO SQL select username,user_id from dba_users where user_id=uid。 USEREN TRUE SESSION 返回會(huì)話標(biāo)志 SQL select userenv(sessionid) from dual。 USERENV(LANGUAGE) SIMPLIFIED LANG 返回當(dāng)前環(huán)境的語言的縮寫 SQL select userenv(lang) from dual。 語句已處理。 SQLWKS mit。 MAX(DISTINCTSAL) 5000 64. MIN(DISTINCT|ALL) 求最小值,ALL表示對(duì)所有的值求最小值,DISTINCT表示對(duì)不同的值求最小值,相同的只取一次 SQL select min(all sal) from 。 VARIANCE(SAL) 67. GROUP BY 主要用來對(duì)一組數(shù)進(jìn)行統(tǒng)計(jì) SQL select deptno,count(*),sum(sal) from group by deptno。 DEPTNO ENAME SAL 10 KING 5000 10 CLARK 2450 10 MILLER 1300 20 SCOTT 3000 20 FORD 3000 20 JONES 2975 20 ADAMS 1100 20 SMITH 800 30 BLAKE 2850 30 ALLEN 1600 30 TURNER 1500 30 WARD 1250 30 MARTIN 1250 30 JAMES 950 70. pl/sql中的case語句 selectX39。 else flaga39。d39。b39。注意兩者的類型要一致 NVL2 (expr1, expr2, expr3) expr1不為NULL,返回expr2;為NULL,返回expr3。 常用的分析函數(shù)如下所列: row_number() over(partition by ... order by ...) rank() over(partition by ... order by ...) dense_rank() over(partition by ... order by ...) count() over(partition by ... order by ...) max() over(partition by ... order by ...) min() over(partition by ... order by ...) sum() over(partition by ... order by ...) avg() over(partition by ... order by ...) first_value() over(partition by ... order by ...) last_value() over(partition by ... order by ...) lag() over(partition by ... order by ...) lead() over(partition by ... order by ...) 開窗函數(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 oneonone》 Tom Kyte 《Oracle9i SQL Reference》第6章 oh 2007312 09:1973. AVG 功能描述:用于計(jì)算一個(gè)組和數(shù)據(jù)窗口內(nèi)表達(dá)式的平均值。 SAMPLE:下例返回1998年月銷售收入和月單位銷售的關(guān)系的累積系數(shù)(本例在SH用戶下運(yùn)行) SELECT , CORR (SUM(), SUM()) OVER (ORDER BY ) as CUM_CORR FROM sales s, times t WHERE = AND calendar_year = 1998 GROUP BY ORDER BY 。 PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS 1774 103088 0 1775 103087 1794 103096 1825 103093 2004 103086 2005 103086 1815 2416 103088 77. COUNT 功能描述:對(duì)一組內(nèi)發(fā)生的事情進(jìn)行累積計(jì)數(shù),如果指定*或一些非空常數(shù),count將對(duì)所有行計(jì)數(shù),如果指定一個(gè)表達(dá)式,count 返回表達(dá)式非空賦值的計(jì)數(shù),當(dāng)有相同值出現(xiàn)時(shí),這些相等的值都會(huì)被納入被計(jì)算的值;可以使用DISTINCT來記錄去掉一組中完全 相同的數(shù)據(jù)后出現(xiàn)的行數(shù)。PU%39。有同樣值的行得到同樣的數(shù)字序號(hào)(認(rèn)為null時(shí)相等的)。9039。 SAMPLE:下面例子計(jì)算按部門分區(qū)按薪水排序的數(shù)據(jù)窗口的第一個(gè)值對(duì)應(yīng)的名字,如果薪水的第一個(gè)值有多個(gè),則從多個(gè)對(duì)應(yīng)的名字中取缺省排序的第一個(gè)名字 SELECT department_id, last_name, salary, FIRST_VALUE(last_name) OVER (PARTITION BY department_id ORDER BY salary ASC ) AS lowest_sal FROM employees WHERE department_id in(20,30)。Offset是一個(gè)正整數(shù),其默認(rèn)值為1,若索引超出窗口的范圍,就返回默認(rèn)值(默認(rèn)返回的是組中第一行),其相反的函數(shù)是LEAD SAMPLE:下面的例子中列prev_sal返回按hire_date排序的前1行的salary值 SELECT last_name, hire_date, salary, LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees WHERE job_id = 39。 SAMPLE:下面例子計(jì)算按部門分區(qū)按薪水排序的數(shù)據(jù)窗口的最后一個(gè)值對(duì)應(yīng)的名字,如果薪水的最后一個(gè)值有多個(gè),則從多個(gè)對(duì)應(yīng)的名字中取缺省排序的最后一個(gè)名字 SELECT department_id, last_name, salary, LAST_VALUE(last_name) OVER(PARTITION BY department_id ORDER BY salary) AS highest_sal FROM employees WHERE department_id in(20,30)。 SAMPLE:下面例子中dept_max返回當(dāng)前行所在部門的最大薪水值 SELECT department_id, last_name, salary, MAX(salary) OVER (PARTITION BY department_id) AS dept_max FROM employees WHERE department_id in (10,20,30)。如果組的基數(shù)不能由表達(dá)式值平均分開,則對(duì)這些行進(jìn)行分配時(shí),組中就沒有任何percentile的行數(shù)比其它percentile的行數(shù)超過一行,最低的percentile是那些擁有額外行的percentile。該函數(shù)總是返回0~1(包括1)之間的數(shù)。 注意:本函數(shù)與PERCENTILE_CONT的區(qū)別在找不到對(duì)應(yīng)的分布值時(shí)返回的替代值的計(jì)算方法不同 SAMPLE:, SELECT last_name, salary, department_id, PERCENTILE_DISC() WITHIN GROUP (ORDER BY salary ) OVER (PARTITION BY department_id) Percentile_Disc, CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) Cume_Dist FROM employees WHERE department_id in (30, 60)。 有同樣值的行得到同樣的數(shù)字序號(hào)(認(rèn)為null時(shí)相等的)。6039。 DEPARTMENT_ID LAST_NAME SALARY DRANK 60 Lorentz 4200 1 60 Austin 4800 2 60 Pataballa 4800 2 60 Ernst 6000 4 60 Hunold 9000 5 90 Kochhar 17000 1 90 De Haan 17000 1 90 King 24000 393. RATIO_TO_REPORT 功能描述:該函數(shù)計(jì)算expression/(sum(expression))的值,它給出相對(duì)于總數(shù)的百分比,即當(dāng)前行對(duì)sum(expression)的貢獻(xiàn)。 REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2) REGR_INTERCEPT:返回回歸線的y截距,等于 AVG(expr1) REGR_SLOPE(expr1, expr2) * AVG(expr2) REGR_COUNT:返回用于填充回歸線的非空數(shù)字對(duì)的數(shù)目 REGR_R2:返回回歸線的決定系數(shù),計(jì)算式為: If VAR_POP(expr2) = 0 then return NULL If VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1 If VAR_POP(expr1) 0 and VAR_POP(expr2 != 0 then return POWER(CORR(expr1,expr),2) REGR_AVGX:計(jì)算回歸線的自變量(expr2)的平均值,去掉了空對(duì)(expr1, expr2)后,等于AVG(expr2) REGR_AVGY:計(jì)算回歸線的應(yīng)變量(expr1)的平均值,去掉了空對(duì)(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:下例計(jì)算1998年最后三個(gè)星期中兩種產(chǎn)品(260和270)在周末的銷售量中已開發(fā)票數(shù)量和總數(shù)量的累積斜率和回歸線的截距 SELECT Month, Day, REGR_SLOPE(, ) OVER (ORDER BY , ) AS CUM_SLOPE, REGR_INTERCEPT(, ) OVER (ORDER BY , ) AS CUM_ICPT FROM sales s, times t WHERE = AND IN (270, 260) AND =1998 AND IN (50,