ASCII返回与指定的字符对应的十进制数;SQL>selectascii(A)A,ascii(a)a,ascii(0)zero,ascii()spacefromdual;AAZEROSPACE------------------------------------659748322.CHR给出整数,返回对应的字符;SQL>selectchr(54740)zhao,chr(65)chr65fromdual;ZHC---赵A3.CONCAT连接两个字符串;SQL>selectconcat(010-,88888888)||转23高乾竞电话fromdual;高乾竞电话----------------010-88888888转234.INITCAP返回字符串并将字符串的第一个字母变为大写;SQL>selectinitcap(smith)uppfromdual;UPP-----Smith5.INSTR(C1,C2,I,J)在一个字符串中搜索指定的字符,返回发现指定的字符的位置;C1被搜索的字符串C2希望搜索的字符串I搜索的开始位置,默认为1J出现的位置,默认为1SQL>selectinstr(oracletraning,ra,1,2)instringfromdual;INSTRING---------96.LENGTH返回字符串的长度;SQL>selectname,length(name),addr,length(addr),sal,length(to_char(sal))fromgao.nchar_tst;NAMELENGTH(NAME)ADDRLENGTH(ADDR)SALLENGTH(TO_CHAR(SAL))---------------------------------------------------------------------------高乾竞3北京市海锭区69999.9977.LOWER返回字符串,并将所有的字符小写SQL>selectlower(AaBbCcDd)AaBbCcDdfromdual;AABBCCDD--------aabbccdd8.UPPER返回字符串,并将所有的字符大写SQL>selectupper(AaBbCcDd)upperfromdual;UPPER--------AABBCCDD9.RPAD和LPAD(粘贴字符)RPAD在列的右边粘贴字符LPAD在列的左边粘贴字符SQL>selectlpad(rpad(gao,10,),17,)fromdual;LPAD(RPAD(GAO,1-----------------gao不够字符则用来填满10.LTRIM和RTRIMLTRIM删除左边出现的字符串RTRIM删除右边出现的字符串SQL>selectltrim(rtrim(gaoqianjing,),)fromdual;LTRIM(RTRIM(-------------gaoqianjing11.SUBSTR(string,start,count)取子字符串,从start开始,取count个SQL>selectsubstr(13088888888,3,8)fromdual;SUBSTR(--------0888888812.REPLACE(string,s1,s2)string希望被替换的字符或变量s1被替换的字符串s2要替换的字符串SQL>selectreplace(heloveyou,he,i)fromdual;REPLACE(H----------iloveyou13.SOUNDEX返回一个与给定的字符串读音相同的字符串SQL>createtabletable1(xmvarchar(8));SQL>insertintotable1values(weather);SQL>insertintotable1values(wether);SQL>insertintotable1values(gao);SQL>selectxmfromtable1wheresoundex(xm)=soundex(weather);XM--------weatherwether?14.TRIM(sfromstring)LEADING剪掉前面的字符TRAILING剪掉后面的字符如果不指定,默认为空格符15.ABS返回指定值的绝对值SQL>selectabs(100),abs(-100)fromdual;ABS(100)ABS(-100)------------------10010016.ACOS给出反余弦的值SQL>selectacos(-1)fromdual;ACOS(-1)---------3.141592717.ASIN给出反正弦的值SQL>selectasin(0.5)fromdual;ASIN(0.5)---------.5235987818.ATAN返回一个数字的反正切值SQL>selectatan(1)fromdual;ATAN(1)---------.7853981619.CEIL返回大于或等于给出数字的最小整数SQL>selectceil(3.1415927)fromdual;CEIL(3.1415927)---------------420.COS返回一个给定数字的余弦SQL>selectcos(-3.1415927)fromdual;COS(-3.1415927)----------------121.COSH返回一个数字反余弦值SQL>selectcosh(20)fromdual;COSH(20)---------24258259822.EXP返回一个数字e的n次方根SQL>selectexp(2),exp(1)fromdual;EXP(2)EXP(1)------------------7.38905612.718281823.FLOOR对给定的数字取整数SQL>selectfloor(2345.67)fromdual;FLOOR(2345.67)--------------234524.LN返回一个数字的对数值SQL>selectln(1),ln(2),ln(2.7182818)fromdual;LN(1)LN(2)LN(2.7182818)-------------------------------0.69314718.9999999925.LOG(n1,n2)返回一个以n1为底n2的对数SQL>selectlog(2,1),log(2,4)fromdual;LOG(2,1)LOG(2,4)------------------0226.MOD(n1,n2)返回一个n1除以n2的余数SQL>selectmod(10,3),mod(3,3),mod(2,3)fromdual;MOD(10,3)MOD(3,3)MOD(2,3)---------------------------10227.POWER返回n1的n2次方根SQL>selectpower(2,10),power(3,3)fromdual;POWER(2,10)POWER(3,3)---------------------10242728.ROUND和TRUNC按照指定的精度进行舍入SQL>selectround(55.5),round(-55.4),trunc(55.5),trunc(-55.5)fromdual;ROUND(55.5)ROUND(-55.4)TRUNC(55.5)TRUNC(-55.5)----------------------------------------------56-5555-5529.SIGN取数字n的符号,大于0返回1,小于0返回-1,等于0返回0SQL>selectsign(123),sign(-100),sign(0)fromdual;SIGN(123)SIGN(-100)SIGN(0)----------------------------1-1030.SIN返回一个数字的正弦值SQL>selectsin(1.57079)fromdual;SIN(1.57079)------------1?31.SIGH返回双曲正弦的值SQL>selectsin(20),sinh(20)fromdual;SIN(20)SINH(20)------------------.9129452524258259832.SQRT返回数字n的根SQL>selectsqrt(64),sqrt(10)fromdual;SQRT(64)SQRT(10)------------------83.162277733.TAN返回数字的正切值SQL>selecttan(20),tan(10)fromdual;TAN(20)TAN(10)------------------2.2371609.6483608334.TANH返回数字n的双曲正切值SQL>selecttanh(20),tan(20)fromdual;TANH(20)TAN(20)------------------12.237160935.TRUNC按照指定的精度截取一个数SQL>selecttrunc(124.1666,-2)trunc1,trunc(124.16666,2)fromdual;TRUNC1TRUNC(124.16666,2)---------------------------100124.1636.ADD_MONTHS增加或减去月份SQL>selectto_char(add_months(to_date(199912,yyyymm),2),yyyymm)fromdual;TO_CHA------200002SQL>selectto_char(add_months(to_date(199912,yyyymm),-2),yyyymm)fromdual;TO_CHA------19991037.LAST_DAY返回日期的最后一天SQL>selectto_char(sysdate,yyyy.mm.dd),to_char((sysdate)+1,yyyy.mm.dd)fromdual;TO_CHAR(SYTO_CHAR((S--------------------2004.05.092004.05.10SQL>selectlast_day(sysdate)fromdual;LAST_DAY(S----------31-5月-0438.MONTHS_BETWEEN(date2,date1)给出date2-date1的月份SQL>selectmonths_between(19-12月-1999,19-3月-1999)mon_betweenfromdual;MON_BETWEEN-----------9SQL>selectmonths_between(to_date(2000.05.20,yyyy.mm.dd),to_date(2005.05.20,yyyy.mm.dd))mon_betwfromdual;MON_BETW----------6039.NEW_TIME(date,this,that)给出在this时区=other时区的日期和时间SQL>selectto_char(sysdate,yyyy.mm.ddhh24:mi:ss)bj_time,to_char(new_time2(sysdate,PDT,GMT),yyyy.mm.ddhh24:mi:ss)los_anglesfromdual;BJ_TIMELOS_ANGLES--------------------------------------2004.05.0911:05:322004.05.0918:05:3240.NEXT_DAY(date,day)给出日期date和星期x之后计算下一个星期的日期SQL>selectnext_day(''18-5月-2001'',''星期五'')next_dayfromdual;NEXT_DAY----------25-5月-0141.SYSDATE用来得到系统的当前日期SQL>selectto_char(sysdate,dd-mm-yyyyday)fromdual;TO_CHAR(SYSDATE,-----------------09-05-2004星期日trunc(date,fmt)按照给出的要求将日期截断,如果fmt=mi表示保留分,截断秒SQL>selectto_char(trunc(sysdate,hh),yyyy.mm.ddhh24:mi:ss)hh,2to_char(trunc(sysdate,mi),yyyy.mm.ddhh24:mi:ss)hhmmfromdual;HHHHMM--------------------------------------2004.05.0911:00:002004.05.0911:17:0042.CHARTOROWID将字符数据类型转换为ROWID类型SQL>selectrowid,rowidtochar(rowid),enamefromscott.emp;ROWIDROWIDTOCHAR(ROWID)ENAME----------------------------------------------AAAAfKAACAAAAEqAAAAAAAfKAACAAAAEqAAASMITHAAAAfKAACAAAAEqAABAAAAfKAACAAAAEqAABALLENAAAAfKAACAAAAEqAACAAAAfKAACAAAAEqAACWARDAAAAfKAACAAAAEqAADAAAAfKAACAAAAEqAADJONES43.CONVERT(c,dset,sset)将源字符串sset从一个语言字符集转换到另一个目的dset字符集SQL>selectconvert(strutz,we8hp,f7dec)"conversion"fromdual;conver------strutz44.HEXTORAW将一个十六进制构成的字符串转换为二进制45.RAWTOHEXT将一个二进制构成的字符串转换为十六进制46.ROWIDTOCHAR将ROWID数据类型转换为字符类型47.TO_CHAR(date,format)SQL>selectto_char(sysdate,yyyy/mm/ddhh24:mi:ss)fromdual;TO_CHAR(SYSDATE,YY-------------------2004/05/0921:14:41?48.TO_DATE(string,format)将字符串转化为ORACLE中的一个日期49.TO_MULTI_BYTE将字符串中的单字节字符转化为多字节字符SQL>selectto_multi_byte(高)fromdual;TO--高50.TO_NUMBER将给出的字符转换为数字SQL>selectto_number(1999)yearfromdual;YEAR---------1999
51.BFILENAME(dir,file)指定一个外部二进制文件SQL>insertintofile_tb1values(bfilename(lob_dir1,image1.gif));52.CONVERT(x,desc,source)将x字段或变量的源source转换为descSQL>selectsid,serial#,username,decode(command,20,none,32,insert,43,5select,66,update,77,delete,88,drop,9other)cmdfromv$sessionwheretype!=background;SIDSERIAL#USERNAMECMD------------------------------------------------------11none21none31none41none51none61none71275none81275none920GAOselect1040GAOnone53.DUMP(s,fmt,start,length)DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值SQL>colglobal_namefora30SQL>coldump_stringfora50SQL>setlin200SQL>selectglobal_name,dump(global_name,1017,8,5)dump_stringfromglobal_name;GLOBAL_NAMEDUMP_STRING--------------------------------------------------------------------------------ORACLE.WORLDTyp=1Len=12CharacterSet=ZHS16GBK:W,O,R,L,D54.EMPTY_BLOB()和EMPTY_CLOB()这两个函数都是用来对大数据类型字段进行初始化操作的函数55.GREATEST返回一组表达式中的最大值,即比较字符的编码大小.SQL>selectgreatest(AA,AB,AC)fromdual;GR--ACSQL>selectgreatest(啊,安,天)fromdual;GR--天56.LEAST返回一组表达式中的最小值SQL>selectleast(啊,安,天)fromdual;LE--啊57.UID返回标识当前用户的唯一整数SQL>showuserUSER为"GAO"SQL>selectusername,user_idfromdba_userswhereuser_id=uid;USERNAMEUSER_ID---------------------------------------GAO2558.USER返回当前用户的名字SQL>selectuserfromdual;USER------------------------------GAO59.USEREVN返回当前用户环境的信息,opt可以是:ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZEISDBA查看当前用户是否是DBA如果是则返回trueSQL>selectuserenv(isdba)fromdual;USEREN------FALSESQL>selectuserenv(isdba)fromdual;USEREN------TRUESESSION返回会话标志SQL>selectuserenv(sessionid)fromdual;USERENV(SESSIONID)--------------------152ENTRYID返回会话人口标志SQL>selectuserenv(entryid)fromdual;USERENV(ENTRYID)------------------0INSTANCE返回当前INSTANCE的标志SQL>selectuserenv(instance)fromdual;USERENV(INSTANCE)-------------------1LANGUAGE返回当前环境变量SQL>selectuserenv(language)fromdual;USERENV(LANGUAGE)----------------------------------------------------SIMPLIFIEDCHINESE_CHINA.ZHS16GBKLANG返回当前环境的语言的缩写SQL>selectuserenv(lang)fromdual;USERENV(LANG)----------------------------------------------------ZHSTERMINAL返回用户的终端或机器的标志SQL>selectuserenv(terminal)fromdual;USERENV(TERMINA----------------GAOVSIZE(X)返回X的大小(字节)数SQL>selectvsize(user),userfromdual;VSIZE(USER)USER-----------------------------------------6SYSTEM?60.AVG(DISTINCT|ALL)all表示对所有的值求平均值,distinct只对不同的值求平均值SQLWKS>createtabletable3(xmvarchar(8),salnumber(7,2));语句已处理。SQLWKS>insertintotable3values(gao,1111.11);SQLWKS>insertintotable3values(gao,1111.11);SQLWKS>insertintotable3values(zhu,5555.55);SQLWKS>commit;SQL>selectavg(distinctsal)fromgao.table3;AVG(DISTINCTSAL)----------------3333.33SQL>selectavg(allsal)fromgao.table3;AVG(ALLSAL)-----------2592.5961.MAX(DISTINCT|ALL)求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次SQL>selectmax(distinctsal)fromscott.emp;MAX(DISTINCTSAL)----------------500062.MIN(DISTINCT|ALL)求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次SQL>selectmin(allsal)fromgao.table3;MIN(ALLSAL)-----------1111.1163.STDDEV(distinct|all)求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差SQL>selectstddev(sal)fromscott.emp;STDDEV(SAL)-----------1182.5032SQL>selectstddev(distinctsal)fromscott.emp;STDDEV(DISTINCTSAL)-------------------1229.95164.VARIANCE(DISTINCT|ALL)求协方差SQL>selectvariance(sal)fromscott.emp;VARIANCE(SAL)-------------1398313.965.GROUPBY主要用来对一组数进行统计SQL>selectdeptno,count(),sum(sal)fromscott.empgroupbydeptno;DEPTNOCOUNT()SUM(SAL)---------------------------103875020510875306940066.HAVING对分组统计再加限制条件SQL>selectdeptno,count(),sum(sal)fromscott.empgroupbydeptnohavingcount()>=5;DEPTNOCOUNT()SUM(SAL)---------------------------205108753069400SQL>selectdeptno,count(),sum(sal)fromscott.emphavingcount()>=5groupbydeptno;DEPTNOCOUNT()SUM(SAL)---------------------------20510875306940067.ORDERBY用于对查询到的结果进行排序输出SQL>selectdeptno,ename,salfromscott.emporderbydeptno,saldesc;DEPTNOENAMESAL----------------------------10KING500010CLARK245010MILLER130020SCOTT300020FORD300020JONES297520ADAMS110020SMITH80030BLAKE285030ALLEN160030TURNER150030WARD125030MARTIN125030JAMES95068.pl/sql中的case语句select?(case?when?DUMMY=''X''?then?0?else?1?end)?as?flag?from?dual;case的第1种用法:casecolwhen''a''then1when''b''then2else0end这种用法跟decode一样没什么区别case的第2种用法:casewhenscore<60then''d''whenscore>=60andscore<70then''c''whenscore>=70andscore<80then''b''else''a''end69.NVL(expr1,expr2)NVL(expr1,expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致NVL2(expr1,expr2,expr3)->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型NULLIF(expr1,expr2)->相等返回NULL,不等返回expr1?Oracle分析函数参考手册=============================================作者:xsb([url]http://xsb.itpub.net)[/url]发表于:2006.03.0112:22分类:DW&BI出处:http://xsb.itpub.net/post/419/33028---------------------------------------------------------------??Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。常用的分析函数如下所列:row_number()over(partitionby...orderby...)rank()over(partitionby...orderby...)dense_rank()over(partitionby...orderby...)count()over(partitionby...orderby...)max()over(partitionby...orderby...)min()over(partitionby...orderby...)sum()over(partitionby...orderby...)avg()over(partitionby...orderby...)first_value()over(partitionby...orderby...)last_value()over(partitionby...orderby...)lag()over(partitionby...orderby...)lead()over(partitionby...orderby...)??下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。除本文内容外,你还可参考:ROLLUP与CUBE[url]http://xsb.itpub.net/post/419/29159[/url]分析函数使用例子介绍:[url]http://xsb.itpub.net/post/419/44634[/url]本文如果未指明,缺省是在HR用户下运行例子。开窗函数的的理解:开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:over(orderbysalary)按照salary排序进行累计,orderby是个默认的开窗函数over(partitionbydeptno)按照部门分区over(orderbysalaryrangebetween50precedingand150following)每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150over(orderbysalaryrowsbetween50precedingand150following)每行对应的数据窗口是之前50行,之后150行over(orderbysalaryrowsbetweenunboundedprecedingandunboundedfollowing)每行对应的数据窗口是从第一行到最后一行,等效:over(orderbysalaryrangebetweenunboundedprecedingandunboundedfollowing)主要参考资料:《expertone-on-one》TomKyte《Oracle9iSQLReference》第6章ohwww2007-3-1209:19
70。AVG功能描述:用于计算一个组和数据窗口内表达式的平均值。SAMPLE:下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告,该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来;SELECTmanager_id,last_name,hire_date,salary,AVG(salary)OVER(PARTITIONBYmanager_idORDERBYhire_dateROWSBETWEEN1PRECEDINGAND1FOLLOWING)ASc_mavgFROMemployees;MANAGER_IDLAST_NAMEHIRE_DATESALARYC_MAVG----------------------------------------------------------------100Kochhar21-SEP-891700017000100DeHaan13-JAN-931700015000100Raphaely07-DEC-941100011966.6667100Kaufling01-MAY-95790010633.3333100Hartstein17-FEB-96130009633.33333100Weiss18-JUL-96800011666.6667100Russell01-OCT-961400011833.333371。CORR功能描述:返回一对表达式的相关系数,它是如下的缩写:COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)STDDEV_POP(expr2))从统计上讲,相关性是变量之间关联的强度,变量之间的关联意味着在某种程度上一个变量的值可由其它的值进行预测。通过返回一个-1~1之间的一个数,相关系数给出了关联的强度,0表示不相关。SAMPLE:下例返回1998年月销售收入和月单位销售的关系的累积系数(本例在SH用户下运行)SELECTt.calendar_month_number,CORR(SUM(s.amount_sold),SUM(s.quantity_sold))OVER(ORDERBYt.calendar_month_number)asCUM_CORRFROMsaless,timestWHEREs.time_id=t.time_idANDcalendar_year=1998GROUPBYt.calendar_month_numberORDERBYt.calendar_month_number;CALENDAR_MONTH_NUMBERCUM_CORR-------------------------------1213.9943093824.8520408755.8466522046.8712506287.9100298038.9175563999.92015435610.8672025111.84486476512.90354266272。COVAR_POP功能描述:返回一对表达式的总体协方差。SAMPLE:下例CUM_COVP返回定价和最小产品价格的累积总体协方差SELECTproduct_id,supplier_id,COVAR_POP(list_price,min_price)OVER(ORDERBYproduct_id,supplier_id)ASCUM_COVP,COVAR_SAMP(list_price,min_price)OVER(ORDERBYproduct_id,supplier_id)ASCUM_COVSFROMproduct_informationpWHEREcategory_id=29ORDERBYproduct_id,supplier_id;PRODUCT_IDSUPPLIER_IDCUM_COVPCUM_COVS-----------------------------------------1774103088017751030871473.252946.517941030961702.777782554.1666718251030931926.252568.3333320041030861591.41989.2520051030861512.5181524161030881475.979591721.97619..73。COVAR_SAMP功能描述:返回一对表达式的样本协方差SAMPLE:下例CUM_COVS返回定价和最小产品价格的累积样本协方差SELECTproduct_id,supplier_id,COVAR_POP(list_price,min_price)OVER(ORDERBYproduct_id,supplier_id)ASCUM_COVP,COVAR_SAMP(list_price,min_price)OVER(ORDERBYproduct_id,supplier_id)ASCUM_COVSFROMproduct_informationpWHEREcategory_id=29ORDERBYproduct_id,supplier_id;PRODUCT_IDSUPPLIER_IDCUM_COVPCUM_COVS-----------------------------------------1774103088017751030871473.252946.517941030961702.777782554.1666718251030931926.252568.3333320041030861591.41989.2520051030861512.5181524161030881475.979591721.97619?74。COUNT功能描述:对一组内发生的事情进行累积计数,如果指定或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。SAMPLE:下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n+150]之间的行数,n表示当前行的薪水例如,Philtanker的薪水2200,排在他之前的行中薪水大于等于2200-50的有1行,排在他之后的行中薪水小于等于2200+150的行没有,所以count计数值cnt3为2(包括自己当前行);cnt2值相当于小于等于当前行的SALARY值的所有行数SELECTlast_name,salary,COUNT()OVER()AScnt1,COUNT()OVER(ORDERBYsalary)AScnt2,COUNT()OVER(ORDERBYsalaryRANGEBETWEEN50PRECEDINGAND150FOLLOWING)AScnt3FROMemployees;LAST_NAMESALARYCNT1CNT2CNT3-----------------------------------------------------------------Olson210010713Markle220010732Philtanker220010732Landry240010758Gee240010758Colmenares25001071110Patel25001071110..75。CUME_DIST功能描述:计算一行在组中的相对位置,CUME_DIST总是返回大于0、小于或等于1的数,该数表示该行在N行中的位置。例如,在一个3行的组中,返回的累计分布值为1/3、2/3、3/3SAMPLE:下例中计算每个工种的员工按薪水排序依次累积出现的分布百分比SELECTjob_id,last_name,salary,CUME_DIST()OVER(PARTITIONBYjob_idORDERBYsalary)AScume_distFROMemployeesWHEREjob_idLIKE''PU%'';JOB_IDLAST_NAMESALARYCUME_DIST-------------------------------------------------------PU_CLERKColmenares2500.2PU_CLERKHimuro2600.4PU_CLERKTobias2800.6PU_CLERKBaida2900.8PU_CLERKKhoo31001PU_MANRaphaely11000176。DENSE_RANK功能描述:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDERBY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDERBY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。密集的序列返回的时没有间隔的数SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与RANK函数的区别)SELECTd.department_id,e.last_name,e.salary,DENSE_RANK()OVER(PARTITIONBYe.department_idORDERBYe.salary)asdrankFROMemployeese,departmentsdWHEREe.department_id=d.department_idANDd.department_idIN(''60'',''90'');DEPARTMENT_IDLAST_NAMESALARYDRANK----------------------------------------------------------60Lorentz4200160Austin4800260Pataballa4800260Ernst6000360Hunold9000490Kochhar17000190DeHaan17000190King24000277。FIRST功能描述:从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值SELECTlast_name,department_id,salary,MIN(salary)KEEP(DENSE_RANKFIRSTORDERBYcommission_pct)OVER(PARTITIONBYdepartment_id)"Worst",MAX(salary)KEEP(DENSE_RANKLASTORDERBYcommission_pct)OVER(PARTITIONBYdepartment_id)"Best"FROMemployeesWHEREdepartment_idin(20,80)ORDERBYdepartment_id,salary;LAST_NAMEDEPARTMENT_IDSALARYWorstBest--------------------------------------------------------------------Fay206000600013000Hartstein2013000600013000Kumar806100610014000Banda806200610014000Johnson806200610014000Ande806400610014000Lee806800610014000Tuvault807000610014000Sewall807000610014000Marvins807200610014000Bates807300610014000...78。FIRST_VALUE功能描述:返回组中数据窗口的第一个值。SAMPLE:下面例子计算按部门分区按薪水排序的数据窗口的第一个值对应的名字,如果薪水的第一个值有多个,则从多个对应的名字中取缺省排序的第一个名字SELECTdepartment_id,last_name,salary,FIRST_VALUE(last_name)OVER(PARTITIONBYdepartment_idORDERBYsalaryASC)ASlowest_salFROMemployeesWHEREdepartment_idin(20,30);DEPARTMENT_IDLAST_NAMESALARYLOWEST_SAL--------------------------------------------------------------20Fay6000Fay20Hartstein13000Fay30Colmenares2500Colmenares30Himuro2600Colmenares30Tobias2800Colmenares30Baida2900Colmenares30Khoo3100Colmenares30Raphaely11000Colmenares79。LAG功能描述:可以访问结果集中的其它行而不用进行自连接。它允许去处理游标,就好像游标是一个数组一样。在给定组中可参考当前行之前的行,这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEADSAMPLE:下面的例子中列prev_sal返回按hire_date排序的前1行的salary值SELECTlast_name,hire_date,salary,LAG(salary,1,0)OVER(ORDERBYhire_date)ASprev_salFROMemployeesWHEREjob_id=''PU_CLERK'';LAST_NAMEHIRE_DATESALARYPREV_SAL-------------------------------------------------------Khoo18-5月-9531000Tobias24-7月-9728003100Baida24-12月-9729002800Himuro15-11月-9826002900Colmenares10-8月-9925002600
80。LAST功能描述:从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值SELECTlast_name,department_id,salary,MIN(salary)KEEP(DENSE_RANKFIRSTORDERBYcommission_pct)OVER(PARTITIONBYdepartment_id)"Worst",MAX(salary)KEEP(DENSE_RANKLASTORDERBYcommission_pct)OVER(PARTITIONBYdepartment_id)"Best"FROMemployeesWHEREdepartment_idin(20,80)ORDERBYdepartment_id,salary;LAST_NAMEDEPARTMENT_IDSALARYWorstBest--------------------------------------------------------------------Fay206000600013000Hartstein2013000600013000Kumar806100610014000Banda806200610014000Johnson806200610014000Ande806400610014000Lee806800610014000Tuvault807000610014000Sewall807000610014000Marvins807200610014000Bates807300610014000.81。LAST_VALUE功能描述:返回组中数据窗口的最后一个值。SAMPLE:下面例子计算按部门分区按薪水排序的数据窗口的最后一个值对应的名字,如果薪水的最后一个值有多个,则从多个对应的名字中取缺省排序的最后一个名字SELECTdepartment_id,last_name,salary,LAST_VALUE(last_name)OVER(PARTITIONBYdepartment_idORDERBYsalary)AShighest_salFROMemployeesWHEREdepartment_idin(20,30);DEPARTMENT_IDLAST_NAMESALARYHIGHEST_SAL------------------------------------------------------------20Fay6000Fay20Hartstein13000Hartstein30Colmenares2500Colmenares30Himuro2600Himuro30Tobias2800Tobias30Baida2900Baida30Khoo3100Khoo30Raphaely11000Raphaely82。LEAD功能描述:LEAD与LAG相反,LEAD可以访问组中当前行之后的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行)SAMPLE:下面的例子中每行的"NextHired"返回按hire_date排序的下一行的hire_date值SELECTlast_name,hire_date,LEAD(hire_date,1)OVER(ORDERBYhire_date)AS"NextHired"FROMemployeesWHEREdepartment_id=30;LAST_NAMEHIRE_DATENextHired-------------------------------------------Raphaely07-DEC-9418-MAY-95Khoo18-MAY-9524-JUL-97Tobias24-JUL-9724-DEC-97Baida24-DEC-9715-NOV-98Himuro15-NOV-9810-AUG-99Colmenares10-AUG-9983。MAX功能描述:在一个组中的数据窗口中查找表达式的最大值。SAMPLE:下面例子中dept_max返回当前行所在部门的最大薪水值SELECTdepartment_id,last_name,salary,MAX(salary)OVER(PARTITIONBYdepartment_id)ASdept_maxFROMemployeesWHEREdepartment_idin(10,20,30);DEPARTMENT_IDLAST_NAMESALARYDEPT_MAX----------------------------------------------------------10Whalen4400440020Hartstein130001300020Fay60001300030Raphaely110001100030Khoo31001100030Baida29001100030Tobias28001100030Himuro26001100030Colmenares25001100084。MIN功能描述:在一个组中的数据窗口中查找表达式的最小值。SAMPLE:下面例子中dept_min返回当前行所在部门的最小薪水值SELECTdepartment_id,last_name,salary,MIN(salary)OVER(PARTITIONBYdepartment_id)ASdept_minFROMemployeesWHEREdepartment_idin(10,20,30);DEPARTMENT_IDLAST_NAMESALARYDEPT_MIN----------------------------------------------------------10Whalen4400440020Hartstein13000600020Fay6000600030Raphaely11000250030Khoo3100250030Baida2900250030Tobias2800250030Himuro2600250030Colmenares2500250085。NTILE功能描述:将一个组分为"表达式"的散列表示,例如,如果表达式=4,则给组中的每一行分配一个数(从1到4),如果组中有20行,则给前5行分配1,给下5行分配2等等。如果组的基数不能由表达式值平均分开,则对这些行进行分配时,组中就没有任何percentile的行数比其它percentile的行数超过一行,最低的percentile是那些拥有额外行的percentile。例如,若表达式=4,行数=21,则percentile=1的有5行,percentile=2的有5行等等。SAMPLE:下例中把6行数据分为4份SELECTlast_name,salary,NTILE(4)OVER(ORDERBYsalaryDESC)ASquartileFROMemployeesWHEREdepartment_id=100;LAST_NAMESALARYQUARTILE---------------------------------------------Greenberg120001Faviet90001Chen82002Urman78002Sciarra77003Popp6900486。PERCENT_RANK功能描述:和CUME_DIST(累积分配)函数类似,对于一个组中给定的行来说,在计算那行的序号时,先减1,然后除以n-1(n为组中所有的行数)。该函数总是返回0~1(包括1)之间的数。SAMPLE:下例中如果Khoo的salary为2900,则pr值为0.6,因为RANK函数对于等值的返回序列值是一样的SELECTdepartment_id,last_name,salary,PERCENT_RANK()OVER(PARTITIONBYdepartment_idORDERBYsalary)ASprFROMemployeesWHEREdepartment_id<50ORDERBYdepartment_id,salary;DEPARTMENT_IDLAST_NAMESALARYPR----------------------------------------------------------10Whalen4400020Fay6000020Hartstein13000130Colmenares2500030Himuro26000.230Tobias28000.430Baida29000.630Khoo31000.830Raphaely11000140Mavris65000?87。PERCENTILE_CONT功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数PERCENT_RANK,如果没有正好对应的数据值,就通过下面算法来得到值:RN=1+(P(N-1))其中P是输入的分布百分比值,N是组内的行数CRN=CEIL(RN)FRN=FLOOR(RN)if(CRN=FRN=RN)then(valueofexpressionfromrowatRN)else(CRN-RN)(valueofexpressionforrowatFRN)+(RN-FRN)(valueofexpressionforrowatCRN)注意:本函数与PERCENTILE_DISC的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE:在下例中,对于部门60的Percentile_Cont值计算如下:P=0.7N=5RN=1+(P(N-1)=1+(0.7(5-1))=3.8CRN=CEIL(3.8)=4FRN=FLOOR(3.8)=3(4-3.8)4800+(3.8-3)6000=5760SELECTlast_name,salary,department_id,PERCENTILE_CONT(0.7)WITHINGROUP(ORDERBYsalary)OVER(PARTITIONBYdepartment_id)"Percentile_Cont",PERCENT_RANK()OVER(PARTITIONBYdepartment_idORDERBYsalary)"Percent_Rank"FROMemployeesWHEREdepartment_idIN(30,60);LAST_NAMESALARYDEPARTMENT_IDPercentile_ContPercent_Rank---------------------------------------------------------------------------Colmenares25003030000Himuro26003030000.2Tobias28003030000.4Baida29003030000.6Khoo31003030000.8Raphaely110003030001Lorentz42006057600Austin48006057600.25Pataballa48006057600.25Ernst60006057600.75Hunold9000605760188。PERCENTILE_DISC功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。注意:本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE:下例中0.7的分布值在部门30中没有对应的Cume_Dist值,所以就取下一个分布值0.83333333所对应的SALARY来替代SELECTlast_name,salary,department_id,PERCENTILE_DISC(0.7)WITHINGROUP(ORDERBYsalary)OVER(PARTITIONBYdepartment_id)"Percentile_Disc",CUME_DIST()OVER(PARTITIONBYdepartment_idORDERBYsalary)"Cume_Dist"FROMemployeesWHEREdepartment_idin(30,60);LAST_NAMESALARYDEPARTMENT_IDPercentile_DiscCume_Dist-------------------------------------------------------------------------Colmenares2500303100.166666667Himuro2600303100.333333333Tobias2800303100.5Baida2900303100.666666667Khoo3100303100.833333333Raphaely110003031001Lorentz4200606000.2Austin4800606000.6Pataballa4800606000.6Ernst6000606000.8Hunold9000606000189。RANK功能描述:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDERBY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDERBY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而,如果两行的确得到同样的排序,则序数将随后跳跃。若两行序数为1,则没有序数2,序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃。SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别)SELECTd.department_id,e.last_name,e.salary,RANK()OVER(PARTITIONBYe.department_idORDERBYe.salary)asdrankFROMemployeese,departmentsdWHEREe.department_id=d.department_idANDd.department_idIN(''60'',''90'');DEPARTMENT_IDLAST_NAMESALARYDRANK----------------------------------------------------------60Lorentz4200160Austin4800260Pataballa4800260Ernst6000460Hunold9000590Kochhar17000190DeHaan17000190King240003
90。RATIO_TO_REPORT功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比SELECTlast_name,salary,RATIO_TO_REPORT(salary)OVER()ASrrFROMemployeesWHEREjob_id=''PU_CLERK'';LAST_NAMESALARYRR---------------------------------------------Khoo3100.223021583Baida2900.208633094Tobias2800.201438849Himuro2600.18705036Colmenares2500.179856115?91。REGR_(LinearRegression)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:返回回归线的决定系数,计算式为:IfVAR_POP(expr2)=0thenreturnNULLIfVAR_POP(expr1)=0andVAR_POP(expr2)!=0thenreturn1IfVAR_POP(expr1)>0andVAR_POP(expr2!=0thenreturnPOWER(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用户下完成的)SAMPLE1:下例计算1998年最后三个星期中两种产品(260和270)在周末的销售量中已开发票数量和总数量的累积斜率和回归线的截距SELECTt.fiscal_month_number"Month",t.day_number_in_month"Day",REGR_SLOPE(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)ASCUM_SLOPE,REGR_INTERCEPT(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)ASCUM_ICPTFROMsaless,timestWHEREs.time_id=t.time_idANDs.prod_idIN(270,260)ANDt.fiscal_year=1998ANDt.fiscal_week_numberIN(50,51,52)ANDt.day_number_in_weekIN(6,7)ORDERBYt.fiscal_month_desc,t.day_number_in_month;MonthDayCUM_SLOPECUM_ICPT----------------------------------------1212-6818721212-6818721213-20.2448981254.367351213-20.2448981254.367351219-18.8260871287122062.4561404125.28655122062.4561404125.28655122062.4561404125.28655122062.4561404125.28655122667.265822858.9712313122667.265822858.9712313122737.5245541284.958221122737.5245541284.958221122737.5245541284.958221SAMPLE2:下例计算1998年4月每天的累积交易数量SELECTUNIQUEt.day_number_in_month,REGR_COUNT(s.amount_sold,s.quantity_sold)OVER(PARTITIONBYt.fiscal_month_numberORDERBYt.day_number_in_month)"Regr_Count"FROMsaless,timestWHEREs.time_id=t.time_idANDt.fiscal_year=1998ANDt.fiscal_month_number=4;DAY_NUMBER_IN_MONTHRegr_Count-----------------------------1825216503247543300
26214503022200SAMPLE3:下例计算1998年每月销售量中已开发票数量和总数量的累积回归线决定系数SELECTt.fiscal_month_number,REGR_R2(SUM(s.amount_sold),SUM(s.quantity_sold))OVER(ORDERBYt.fiscal_month_number)"Regr_R2"FROMsaless,timestWHEREs.time_id=t.time_idANDt.fiscal_year=1998GROUPBYt.fiscal_month_numberORDERBYt.fiscal_month_number;FISCAL_MONTH_NUMBERRegr_R2-----------------------------1213.9273729844.8070199725.9327455676.946828617.9653420118.9557680759.95954261810.93861857511.88093141512.882769189SAMPLE4:下例计算1998年12月最后两周产品260的销售量中已开发票数量和总数量的累积平均值SELECTt.day_number_in_month,REGR_AVGY(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)"Regr_AvgY",REGR_AVGX(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)"Regr_AvgX"FROMsaless,timestWHEREs.time_id=t.time_idANDs.prod_id=260ANDt.fiscal_month_desc=''1998-12''ANDt.fiscal_week_numberIN(51,52)ORDERBYt.day_number_in_month;DAY_NUMBER_IN_MONTHRegr_AvgYRegr_AvgX---------------------------------------1488224.51488224.51580122.251580122.2516777.621.618642.85714317.857142918642.85714317.857142920589.516.3752154415.111111122592.36363616.454545522592.36363616.454545524553.84615415.384615424553.84615415.38461542652214.527578.416.0666667SAMPLE5:下例计算产品260和270在1998年2月周末销售量中已开发票数量和总数量的累积REGR_SXY,REGR_SXX,andREGR_SYY统计值SELECTt.day_number_in_month,REGR_SXY(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_year,t.fiscal_month_desc)"Regr_sxy",REGR_SYY(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_year,t.fiscal_month_desc)"Regr_syy",REGR_SXX(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_year,t.fiscal_month_desc)"Regr_sxx"FROMsaless,timestWHEREs.time_id=t.time_idANDprod_idIN(270,260)ANDt.fiscal_month_desc=''1998-02''ANDt.day_number_in_weekIN(6,7)ORDERBYt.day_number_in_month;DAY_NUMBER_IN_MONTHRegr_sxyRegr_syyRegr_sxx-------------------------------------------------118870.42116198.4258.4118870.42116198.4258.4118870.42116198.4258.4118870.42116198.4258.4718870.42116198.4258.4818870.42116198.4258.41418870.42116198.4258.41518870.42116198.4258.42118870.42116198.4258.42218870.42116198.4258.4
92。ROW_NUMBER功能描述:返回有序组中一行的偏移量,从而可用于按特定标准排序的行号。SAMPLE:下例返回每个员工再在每个部门中按员工号排序后的顺序号SELECTdepartment_id,last_name,employee_id,ROW_NUMBER()OVER(PARTITIONBYdepartment_idORDERBYemployee_id)ASemp_idFROMemployeesWHEREdepartment_id<50;DEPARTMENT_IDLAST_NAMEEMPLOYEE_IDEMP_ID-----------------------------------------------------------10Whalen200120Hartstein201120Fay202230Raphaely114130Khoo115230Baida116330Tobias117430Himuro118530Colmenares119640Mavris203193。STDDEV功能描述:计算当前行关于组的标准偏离。(StandardDeviation)SAMPLE:下例返回部门30按雇佣日期排序的薪水值的累积标准偏离SELECTlast_name,hire_date,salary,STDDEV(salary)OVER(ORDERBYhire_date)"StdDev"FROMemployeesWHEREdepartment_id=30;LAST_NAMEHIRE_DATESALARYStdDev-------------------------------------------------------Raphaely07-12月-94110000Khoo18-5月-9531005586.14357Tobias24-7月-9728004650.0896Baida24-12月-9729004035.26125Himuro15-11月-9826003649.2465Colmenares10-8月-9925003362.5882994。STDDEV_POP功能描述:该函数计算总体标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同。(StandardDeviation-Population)SAMPLE:下例返回部门20、30、60的薪水值的总体标准偏差SELECTdepartment_id,last_name,salary,STDDEV_POP(salary)OVER(PARTITIONBYdepartment_id)ASpop_stdFROMemployeesWHEREdepartment_idin(20,30,60);DEPARTMENT_IDLAST_NAMESALARYPOP_STD----------------------------------------------------------20Hartstein13000350020Fay6000350030Raphaely110003069.609130Khoo31003069.609130Baida29003069.609130Colmenares25003069.609130Himuro26003069.609130Tobias28003069.609160Hunold90001722.3240160Ernst60001722.3240160Austin48001722.3240160Pataballa48001722.3240160Lorentz42001722.32401
95。STDDEV_SAMP功能描述:该函数计算累积样本标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同。(StandardDeviation-Sample)SAMPLE:下例返回部门20、30、60的薪水值的样本标准偏差SELECTdepartment_id,last_name,hire_date,salary,STDDEV_SAMP(salary)OVER(PARTITIONBYdepartment_idORDERBYhire_dateROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW)AScum_sdevFROMemployeesWHEREdepartment_idin(20,30,60);DEPARTMENT_IDLAST_NAMEHIRE_DATESALARYCUM_SDEV--------------------------------------------------------------------20Hartstein17-2月-961300020Fay17-8月-9760004949.7474730Raphaely07-12月-941100030Khoo18-5月-9531005586.1435730Tobias24-7月-9728004650.089630Baida24-12月-9729004035.2612530Himuro15-11月-9826003649.246530Colmenares10-8月-9925003362.5882960Hunold03-1月-90900060Ernst21-5月-9160002121.3203460Austin25-6月-9748002163.3307760Pataballa05-2月-9848001982.4227660Lorentz07-2月-9942001925.6167896。SUM功能描述:该函数计算组中表达式的累积和。SAMPLE:下例计算同一经理下员工的薪水累积值SELECTmanager_id,last_name,salary,SUM(salary)OVER(PARTITIONBYmanager_idORDERBYsalaryRANGEUNBOUNDEDPRECEDING)l_csumFROMemployeesWHEREmanager_idin(101,103,108);MANAGER_IDLAST_NAMESALARYL_CSUM-------------------------------------------------------101Whalen44004400101Mavris650010900101Baer1000020900101Greenberg1200044900101Higgins1200044900103Lorentz42004200103Austin480013800103Pataballa480013800103Ernst600019800108Popp69006900108Sciarra770014600108Urman780022400108Chen820030600108Faviet90003960097。VAR_POP功能描述:(VariancePopulation)该函数返回非空集合的总体变量(忽略null),VAR_POP进行如下计算:(SUM(expr2)-SUM(expr)2/COUNT(expr))/COUNT(expr)SAMPLE:下例计算1998年每月销售的累积总体和样本变量(本例在SH用户下运行)SELECTt.calendar_month_desc,VAR_POP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Pop",VAR_SAMP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Samp"FROMsaless,timestWHEREs.time_id=t.time_idANDt.calendar_year=1998GROUPBYt.calendar_month_desc;CALENDARVar_PopVar_Samp----------------------------1998-0101998-026.1321E+111.2264E+121998-034.7058E+117.0587E+111998-044.6929E+116.2572E+111998-051.5524E+121.9405E+121998-062.3711E+122.8453E+121998-073.7464E+124.3708E+121998-083.7852E+124.3260E+121998-093.5753E+124.0222E+121998-103.4343E+123.8159E+121998-113.4245E+123.7669E+121998-124.8937E+125.3386E+12?98。VAR_SAMP功能描述:(VarianceSample)该函数返回非空集合的样本变量(忽略null),VAR_POP进行如下计算:(SUM(exprexpr)-SUM(expr)SUM(expr)/COUNT(expr))/(COUNT(expr)-1)SAMPLE:下例计算1998年每月销售的累积总体和样本变量SELECTt.calendar_month_desc,VAR_POP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Pop",VAR_SAMP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Samp"FROMsaless,timestWHEREs.time_id=t.time_idANDt.calendar_year=1998GROUPBYt.calendar_month_desc;CALENDARVar_PopVar_Samp----------------------------1998-0101998-026.1321E+111.2264E+121998-034.7058E+117.0587E+111998-044.6929E+116.2572E+111998-051.5524E+121.9405E+121998-062.3711E+122.8453E+121998-073.7464E+124.3708E+121998-083.7852E+124.3260E+121998-093.5753E+124.0222E+121998-103.4343E+123.8159E+121998-113.4245E+123.7669E+121998-124.8937E+125.3386E+1299。VARIANCE功能描述:该函数返回表达式的变量,Oracle计算该变量如下:如果表达式中行数为1,则返回0如果表达式中行数大于1,则返回VAR_SAMPSAMPLE:下例返回部门30按雇佣日期排序的薪水值的累积变化SELECTlast_name,salary,VARIANCE(salary)OVER(ORDERBYhire_date)"Variance"FROMemployeesWHEREdepartment_id=30;LAST_NAMESALARYVariance---------------------------------------------Raphaely110000Khoo310031205000Tobias280021623333.3Baida290016283333.3Himuro260013317000Colmenares250011307000100。RANK功能描述:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDERBY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDERBY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而,如果两行的确得到同样的排序,则序数将随后跳跃。若两行序数为1,则没有序数2,序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃。SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别)SELECTd.department_id,e.last_name,e.salary,RANK()OVER(PARTITIONBYe.department_idORDERBYe.salary)asdrankFROMemployeese,departmentsdWHEREe.department_id=d.department_idANDd.department_idIN(''60'',''90'');DEPARTMENT_IDLAST_NAMESALARYDRANK----------------------------------------------------------60Lorentz4200160Austin4800260Pataballa4800260Ernst6000460Hunold9000590Kochhar17000190DeHaan17000190King240003
101。RATIO_TO_REPORT功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比SELECTlast_name,salary,RATIO_TO_REPORT(salary)OVER()ASrrFROMemployeesWHEREjob_id=''PU_CLERK'';LAST_NAMESALARYRR---------------------------------------------Khoo3100.223021583Baida2900.208633094Tobias2800.201438849Himuro2600.18705036Colmenares2500.179856115?102。REGR_(LinearRegression)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:返回回归线的决定系数,计算式为:IfVAR_POP(expr2)=0thenreturnNULLIfVAR_POP(expr1)=0andVAR_POP(expr2)!=0thenreturn1IfVAR_POP(expr1)>0andVAR_POP(expr2!=0thenreturnPOWER(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用户下完成的)SAMPLE1:下例计算1998年最后三个星期中两种产品(260和270)在周末的销售量中已开发票数量和总数量的累积斜率和回归线的截距SELECTt.fiscal_month_number"Month",t.day_number_in_month"Day",REGR_SLOPE(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)ASCUM_SLOPE,REGR_INTERCEPT(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)ASCUM_ICPTFROMsaless,timestWHEREs.time_id=t.time_idANDs.prod_idIN(270,260)ANDt.fiscal_year=1998ANDt.fiscal_week_numberIN(50,51,52)ANDt.day_number_in_weekIN(6,7)ORDERBYt.fiscal_month_desc,t.day_number_in_month;MonthDayCUM_SLOPECUM_ICPT----------------------------------------1212-6818721212-6818721213-20.2448981254.367351213-20.2448981254.367351219-18.8260871287122062.4561404125.28655122062.4561404125.28655122062.4561404125.28655122062.4561404125.28655122667.265822858.9712313122667.265822858.9712313122737.5245541284.958221122737.5245541284.958221122737.5245541284.958221SAMPLE2:下例计算1998年4月每天的累积交易数量SELECTUNIQUEt.day_number_in_month,REGR_COUNT(s.amount_sold,s.quantity_sold)OVER(PARTITIONBYt.fiscal_month_numberORDERBYt.day_number_in_month)"Regr_Count"FROMsaless,timestWHEREs.time_id=t.time_idANDt.fiscal_year=1998ANDt.fiscal_month_number=4;DAY_NUMBER_IN_MONTHRegr_Count-----------------------------1825216503247543300.26214503022200SAMPLE3:下例计算1998年每月销售量中已开发票数量和总数量的累积回归线决定系数SELECTt.fiscal_month_number,REGR_R2(SUM(s.amount_sold),SUM(s.quantity_sold))OVER(ORDERBYt.fiscal_month_number)"Regr_R2"FROMsaless,timestWHEREs.time_id=t.time_idANDt.fiscal_year=1998GROUPBYt.fiscal_month_numberORDERBYt.fiscal_month_number;FISCAL_MONTH_NUMBERRegr_R2-----------------------------1213.9273729844.8070199725.9327455676.946828617.9653420118.9557680759.95954261810.93861857511.88093141512.882769189SAMPLE4:下例计算1998年12月最后两周产品260的销售量中已开发票数量和总数量的累积平均值SELECTt.day_number_in_month,REGR_AVGY(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)"Regr_AvgY",REGR_AVGX(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_month_desc,t.day_number_in_month)"Regr_AvgX"FROMsaless,timestWHEREs.time_id=t.time_idANDs.prod_id=260ANDt.fiscal_month_desc=''1998-12''ANDt.fiscal_week_numberIN(51,52)ORDERBYt.day_number_in_month;DAY_NUMBER_IN_MONTHRegr_AvgYRegr_AvgX---------------------------------------1488224.51488224.51580122.251580122.2516777.621.618642.85714317.857142918642.85714317.857142920589.516.3752154415.111111122592.36363616.454545522592.36363616.454545524553.84615415.384615424553.84615415.38461542652214.527578.416.0666667SAMPLE5:下例计算产品260和270在1998年2月周末销售量中已开发票数量和总数量的累积REGR_SXY,REGR_SXX,andREGR_SYY统计值SELECTt.day_number_in_month,REGR_SXY(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_year,t.fiscal_month_desc)"Regr_sxy",REGR_SYY(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_year,t.fiscal_month_desc)"Regr_syy",REGR_SXX(s.amount_sold,s.quantity_sold)OVER(ORDERBYt.fiscal_year,t.fiscal_month_desc)"Regr_sxx"FROMsaless,timestWHEREs.time_id=t.time_idANDprod_idIN(270,260)ANDt.fiscal_month_desc=''1998-02''ANDt.day_number_in_weekIN(6,7)ORDERBYt.day_number_in_month;DAY_NUMBER_IN_MONTHRegr_sxyRegr_syyRegr_sxx-------------------------------------------------118870.42116198.4258.4118870.42116198.4258.4118870.42116198.4258.4118870.42116198.4258.4718870.42116198.4258.4818870.42116198.4258.41418870.42116198.4258.41518870.42116198.4258.42118870.42116198.4258.42218870.42116198.4258.4?103。ROW_NUMBER功能描述:返回有序组中一行的偏移量,从而可用于按特定标准排序的行号。SAMPLE:下例返回每个员工再在每个部门中按员工号排序后的顺序号SELECTdepartment_id,last_name,employee_id,ROW_NUMBER()OVER(PARTITIONBYdepartment_idORDERBYemployee_id)ASemp_idFROMemployeesWHEREdepartment_id<50;DEPARTMENT_IDLAST_NAMEEMPLOYEE_IDEMP_ID-----------------------------------------------------------10Whalen200120Hartstein201120Fay202230Raphaely114130Khoo115230Baida116330Tobias117430Himuro118530Colmenares119640Mavris2031104。STDDEV功能描述:计算当前行关于组的标准偏离。(StandardDeviation)SAMPLE:下例返回部门30按雇佣日期排序的薪水值的累积标准偏离SELECTlast_name,hire_date,salary,STDDEV(salary)OVER(ORDERBYhire_date)"StdDev"FROMemployeesWHEREdepartment_id=30;LAST_NAMEHIRE_DATESALARYStdDev-------------------------------------------------------Raphaely07-12月-94110000Khoo18-5月-9531005586.14357Tobias24-7月-9728004650.0896Baida24-12月-9729004035.26125Himuro15-11月-9826003649.2465Colmenares10-8月-9925003362.58829
105。STDDEV_POP功能描述:该函数计算总体标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同。(StandardDeviation-Population)SAMPLE:下例返回部门20、30、60的薪水值的总体标准偏差SELECTdepartment_id,last_name,salary,STDDEV_POP(salary)OVER(PARTITIONBYdepartment_id)ASpop_stdFROMemployeesWHEREdepartment_idin(20,30,60);DEPARTMENT_IDLAST_NAMESALARYPOP_STD----------------------------------------------------------20Hartstein13000350020Fay6000350030Raphaely110003069.609130Khoo31003069.609130Baida29003069.609130Colmenares25003069.609130Himuro26003069.609130Tobias28003069.609160Hunold90001722.3240160Ernst60001722.3240160Austin48001722.3240160Pataballa48001722.3240160Lorentz42001722.32401106。STDDEV_SAMP功能描述:该函数计算累积样本标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同。(StandardDeviation-Sample)SAMPLE:下例返回部门20、30、60的薪水值的样本标准偏差SELECTdepartment_id,last_name,hire_date,salary,STDDEV_SAMP(salary)OVER(PARTITIONBYdepartment_idORDERBYhire_dateROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW)AScum_sdevFROMemployeesWHEREdepartment_idin(20,30,60);DEPARTMENT_IDLAST_NAMEHIRE_DATESALARYCUM_SDEV--------------------------------------------------------------------20Hartstein17-2月-961300020Fay17-8月-9760004949.7474730Raphaely07-12月-941100030Khoo18-5月-9531005586.1435730Tobias24-7月-9728004650.089630Baida24-12月-9729004035.2612530Himuro15-11月-9826003649.246530Colmenares10-8月-9925003362.5882960Hunold03-1月-90900060Ernst21-5月-9160002121.3203460Austin25-6月-9748002163.3307760Pataballa05-2月-9848001982.4227660Lorentz07-2月-9942001925.61678107。SUM功能描述:该函数计算组中表达式的累积和。SAMPLE:下例计算同一经理下员工的薪水累积值SELECTmanager_id,last_name,salary,SUM(salary)OVER(PARTITIONBYmanager_idORDERBYsalaryRANGEUNBOUNDEDPRECEDING)l_csumFROMemployeesWHEREmanager_idin(101,103,108);MANAGER_IDLAST_NAMESALARYL_CSUM-------------------------------------------------------101Whalen44004400101Mavris650010900101Baer1000020900101Greenberg1200044900101Higgins1200044900103Lorentz42004200103Austin480013800103Pataballa480013800103Ernst600019800108Popp69006900108Sciarra770014600108Urman780022400108Chen820030600108Faviet900039600108。VAR_POP功能描述:(VariancePopulation)该函数返回非空集合的总体变量(忽略null),VAR_POP进行如下计算:(SUM(expr2)-SUM(expr)2/COUNT(expr))/COUNT(expr)SAMPLE:下例计算1998年每月销售的累积总体和样本变量(本例在SH用户下运行)SELECTt.calendar_month_desc,VAR_POP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Pop",VAR_SAMP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Samp"FROMsaless,timestWHEREs.time_id=t.time_idANDt.calendar_year=1998GROUPBYt.calendar_month_desc;CALENDARVar_PopVar_Samp----------------------------1998-0101998-026.1321E+111.2264E+121998-034.7058E+117.0587E+111998-044.6929E+116.2572E+111998-051.5524E+121.9405E+121998-062.3711E+122.8453E+121998-073.7464E+124.3708E+121998-083.7852E+124.3260E+121998-093.5753E+124.0222E+121998-103.4343E+123.8159E+121998-113.4245E+123.7669E+121998-124.8937E+125.3386E+12109。VAR_SAMP功能描述:(VarianceSample)该函数返回非空集合的样本变量(忽略null),VAR_POP进行如下计算:(SUM(exprexpr)-SUM(expr)SUM(expr)/COUNT(expr))/(COUNT(expr)-1)SAMPLE:下例计算1998年每月销售的累积总体和样本变量SELECTt.calendar_month_desc,VAR_POP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Pop",VAR_SAMP(SUM(s.amount_sold))OVER(ORDERBYt.calendar_month_desc)"Var_Samp"FROMsaless,timestWHEREs.time_id=t.time_idANDt.calendar_year=1998GROUPBYt.calendar_month_desc;CALENDARVar_PopVar_Samp----------------------------1998-0101998-026.1321E+111.2264E+121998-034.7058E+117.0587E+111998-044.6929E+116.2572E+111998-051.5524E+121.9405E+121998-062.3711E+122.8453E+121998-073.7464E+124.3708E+121998-083.7852E+124.3260E+121998-093.5753E+124.0222E+121998-103.4343E+123.8159E+121998-113.4245E+123.7669E+121998-124.8937E+125.3386E+12110。VARIANCE功能描述:该函数返回表达式的变量,Oracle计算该变量如下:如果表达式中行数为1,则返回0如果表达式中行数大于1,则返回VAR_SAMPSAMPLE:下例返回部门30按雇佣日期排序的薪水值的累积变化SELECTlast_name,salary,VARIANCE(salary)OVER(ORDERBYhire_date)"Variance"FROMemployeesWHEREdepartment_id=30;LAST_NAMESALARYVariance---------------------------------------------Raphaely110000Khoo310031205000Tobias280021623333.3Baida290016283333.3Himuro260013317000Colmenares250011307000
|
|