知识大全 110个Oracle常用函数的总结

Posted 函数

篇首语:读书不趁早,后来徒悔懊。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 110个Oracle常用函数的总结相关的知识,希望对你有一定的参考价值。

总结归纳:110个Oracle常用函数的总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  /*=================================================================== *Author:  *Date:  / /  *Description:ORACLE Function *==================================================================*/ SQL中的单记录函数 ASCII返回与指定的字符对应的十进制数;SQL> select ascii(A) A ascii(a) a ascii( ) zero ascii( ) space from dual;

  A A ZERO SPACE

   CHR给出整数 返回对应的字符;SQL> select chr( ) zhao chr( ) chr from dual;

  ZH C 赵 A

   CONCAT连接两个字符串;SQL> select concat( )||转 高干竞电话 from dual;

  高干竞电话 转

   INITCAP返回字符串并将字符串的第一个字母变为大写;SQL> select initcap(smith) upp from dual;

  UPP Smith

   INSTR(C C I J)在一个字符串中搜索指定的字符 返回发现指定的字符的位置;C 被搜索的字符串C 希望搜索的字符串I 搜索的开始位置 默认为 J 出现的位置 默认为 SQL> select instr(oracle traning ra ) instring from dual;

  INSTRING

   LENGTH返回字符串的长度;SQL> select name length(name) addr length(addr) sal length(to_char(sal)) from gao nchar_tst;

  NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL)) 高干竞 北京市海锭区

   LOWER返回字符串 并将所有的字符小写SQL> select lower(AaBbCcDd)AaBbCcDd from dual;

  AABBCCDD aabbccdd

   UPPER返回字符串 并将所有的字符大写SQL> select upper(AaBbCcDd) upper from dual;

  UPPER AABBCCDD

   RPAD和LPAD(粘贴字符)RPAD 在列的右边粘贴字符LPAD 在列的左边粘贴字符SQL> select lpad(rpad(gao *) *)from dual;

  LPAD(RPAD(GAO *******gao*******不够字符则用*来填满

   LTRIM和RTRIMLTRIM 删除左边出现的字符串RTRIM 删除右边出现的字符串SQL> select ltrim(rtrim( gao qian jing ) ) from dual;

  LTRIM(RTRIM( gao qian jing

   SUBSTR(string start count)取子字符串 从start开始 取count个SQL> select substr( ) from dual;

  SUBSTR(

   REPLACE(string s s )string 希望被替换的字符或变量 s 被替换的字符串s 要替换的字符串SQL> select replace(he love you he i) from dual;

  REPLACE(H i love you

   SOUNDEX返回一个与给定的字符串读音相同的字符串SQL> create table table (xm varchar( ));SQL> insert into table values(weather);SQL> insert into table values(wether);SQL> insert into table values(gao);

  SQL> select xm from table where soundex(xm)=soundex(weather);

  XM weatherwether

   TRIM(s from string)LEADING 剪掉前面的字符TRAILING 剪掉后面的字符如果不指定 默认为空格符

   ABS返回指定值的绝对值SQL> select abs( ) abs( ) from dual;

  ABS( ) ABS( )

   ACOS给出反余弦的值SQL> select acos( ) from dual;

  ACOS( )

   ASIN给出反正弦的值SQL> select asin( ) from dual;

  ASIN( )

   ATAN返回一个数字的反正切值SQL> select atan( ) from dual;

  ATAN( )

   CEIL返回大于或等于给出数字的最小整数SQL> select ceil( ) from dual;

  CEIL( )

   COS返回一个给定数字的余弦SQL> select cos( ) from dual;

  COS( )

   COSH返回一个数字反余弦值SQL> select cosh( ) from dual;

  COSH( )

   EXP返回一个数字e的n次方根SQL> select exp( ) exp( ) from dual;

  EXP( ) EXP( )

   FLOOR对给定的数字取整数SQL> select floor( ) from dual;

  FLOOR( )

   LN返回一个数字的对数值SQL> select ln( ) ln( ) ln( ) from dual;

  LN( ) LN( ) LN( )

   LOG(n n )返回一个以n 为底n 的对数 SQL> select log( ) log( ) from dual;

  LOG( ) LOG( )

   MOD(n n )返回一个n 除以n 的余数SQL> select mod( ) mod( ) mod( ) from dual;

  MOD( ) MOD( ) MOD( )

   POWER返回n 的n 次方根SQL> select power( ) power( ) from dual;

  POWER( ) POWER( )

   ROUND和TRUNC按照指定的精度进行舍入SQL> select round( ) round( ) trunc( ) trunc( ) from dual;

  ROUND( ) ROUND( ) TRUNC( ) TRUNC( )

   SIGN取数字n的符号 大于 返回 小于 返回 等于 返回 SQL> select sign( ) sign( ) sign( ) from dual;

  SIGN( ) SIGN( ) SIGN( )

   SIN返回一个数字的正弦值SQL> select sin( ) from dual;

  SIN( )

   SIGH返回双曲正弦的值SQL> select sin( ) sinh( ) from dual;

  SIN( ) SINH( )

   SQRT返回数字n的根SQL> select sqrt( ) sqrt( ) from dual;

  SQRT( ) SQRT( )

   TAN返回数字的正切值SQL> select tan( ) tan( ) from dual;

  TAN( ) TAN( )

   TANH返回数字n的双曲正切值SQL> select tanh( ) tan( ) from dual;

  TANH( ) TAN( )

   TRUNC按照指定的精度截取一个数SQL> select trunc( ) trunc trunc( ) from dual;

  TRUNC TRUNC( )

   ADD_MONTHS增加或减去月份SQL> select to_char(add_months(to_date( yyyymm) ) yyyymm) from dual;

  TO_CHA SQL> select to_char(add_months(to_date( yyyymm) ) yyyymm) from dual;

  TO_CHA

   LAST_DAY返回日期的最后一天SQL> select to_char(sysdate yyyy mm dd) to_char((sysdate)+ yyyy mm dd) from dual;

  TO_CHAR(SY TO_CHAR((S SQL> select last_day(sysdate) from dual;

  LAST_DAY(S 月

   MONTHS_BEEEN(date date )给出date date 的月份SQL> select months_beeen( 月 月 ) mon_beeen from dual;

  MON_BEEEN SQL>selectmonths_beeen(to_date( yyyy mm dd) to_date( yyyy mm dd)) mon_be from dual;

  MON_BE

   NEW_TIME(date this that)给出在this时区=other时区的日期和时间SQL> select to_char(sysdate yyyy mm dd hh :mi:ss) bj_time to_char(new_time (sysdate PDT GMT) yyyy mm dd hh :mi:ss) los_angles from dual;

  BJ_TIME LOS_ANGLES : : : :

   NEXT_DAY(date day)给出日期date和星期x之后计算下一个星期的日期SQL> select next_day( 月 星期五 ) next_day from dual;

  NEXT_DAY 月

   SYSDATE用来得到系统的当前日期SQL> select to_char(sysdate dd mm yyyy day) from dual;

  TO_CHAR(SYSDATE 星期日trunc(date fmt)按照给出的要求将日期截断 如果fmt=mi表示保留分 截断秒SQL> select to_char(trunc(sysdate hh) yyyy mm dd hh :mi:ss) hh to_char(trunc(sysdate mi) yyyy mm dd hh :mi:ss) hhmm from dual;

  HH HHMM : : : :

   CHARTOROWID将字符数据类型转换为ROWID类型SQL> select rowid rowidtochar(rowid) ename from scott emp;

  ROWID ROWIDTOCHAR(ROWID) ENAME AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITHAAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLENAAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARDAAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

   CONVERT(c dset sset)将源字符串 sset从一个语言字符集转换到另一个目的dset字符集SQL> select convert(strutz we hp f dec) conversion from dual;

  conver strutz

   HEXTORAW将一个十六进制构成的字符串转换为二进制

   RAWTOHEXT将一个二进制构成的字符串转换为十六进制

   ROWIDTOCHAR将ROWID数据类型转换为字符类型

   TO_CHAR(date format)SQL> select to_char(sysdate yyyy/mm/dd hh :mi:ss) from dual;

  TO_CHAR(SYSDATE YY / / : :

   TO_DATE(string format)将字符串转化为ORACLE中的一个日期

   TO_MULTI_BYTE将字符串中的单字节字符转化为多字节字符SQL> select to_multi_byte(高) from dual;

  TO 高

   TO_NUMBER将给出的字符转换为数字SQL> select to_number( ) year from dual;

  YEAR

   BFILENAME(dir file)指定一个外部二进制文件SQL>insert into file_tb values(bfilename(lob_dir image gif));

   CONVERT(x desc source)将x字段或变量的源source转换为descSQL> select sid serial# username decode(mand none insert select update delete drop other) cmd from v$session where type!=background;

  SID SERIAL# USERNAME CMD none none none none none none none none GAO select GAO none

   DUMP(s fmt start length)DUMP函数以fmt指定的内部数字格式返回一个VARCHAR 类型的值SQL> col global_name for a SQL> col dump_string for a SQL> set lin SQL> select global_name dump(global_name ) dump_string from global_name;

  GLOBAL_NAME DUMP_STRING ORACLE WORLD Typ= Len= CharacterSet=ZHS GBK: W O R L D

   EMPTY_BLOB()和EMPTY_CLOB()这两个函数都是用来对大数据类型字段进行初始化操作的函数

   GREATEST返回一组表达式中的最大值 即比较字符的编码大小 SQL> select greatest(AA AB AC) from dual;

  GR ACSQL> select greatest(啊 安 天) from dual;

  GR 天

   LEAST返回一组表达式中的最小值 SQL> select least(啊 安 天) from dual;

  LE 啊

   UID返回标识当前用户的唯一整数SQL> show userUSER 为 GAO SQL> select username user_id from dba_users where user_id=uid;

  USERNAME USER_ID GAO

   USER返回当前用户的名字SQL> select user from dual;

  USER GAO

   USEREVN返回当前用户环境的信息 opt可以是:ENTRYID SESSIONID TERMINAL ISDBA LABLE LANGUAGE CLIENT_INFO LANG VSIZEISDBA 查看当前用户是否是DBA如果是则返回trueSQL> select userenv(isdba) from dual;

  USEREN FALSESQL> select userenv(isdba) from dual;

  USEREN TRUESESSION返回会话标志SQL> select userenv(sessionid) from dual;

  USERENV(SESSIONID) ENTRYID返回会话人口标志SQL> select userenv(entryid) from dual;

  USERENV(ENTRYID) INSTANCE返回当前INSTANCE的标志SQL> select userenv(instance) from dual;

  USERENV(INSTANCE) LANGUAGE返回当前环境变量SQL> select userenv(language) from dual;

  USERENV(LANGUAGE) SIMPLIFIED CHINESE_CHINA ZHS GBKLANG返回当前环境的语言的缩写SQL> select userenv(lang) from dual;

  USERENV(LANG) ZHSTERMINAL返回用户的终端或机器的标志SQL> select userenv(terminal) from dual;

  USERENV(TERMINA GAOVSIZE(X)返回X的大小(字节)数SQL> select vsize(user) user from dual;

  VSIZE(USER) USER SYSTEM

   AVG(DISTINCT|ALL)all表示对所有的值求平均值 distinct只对不同的值求平均值SQLWKS> create table table (xm varchar( ) sal number( ));语句已处理 SQLWKS> insert into table values(gao );SQLWKS> insert into table values(gao );SQLWKS> insert into table values(zhu );SQLWKS> mit;

  SQL> select avg(distinct sal) from gao table ;

  AVG(DISTINCTSAL)

  SQL> select avg(all sal) from gao table ;

  AVG(ALLSAL)

   MAX(DISTINCT|ALL)求最大值 ALL表示对所有的值求最大值 DISTINCT表示对不同的值求最大值 相同的只取一次SQL> select max(distinct sal) from scott emp;

  MAX(DISTINCTSAL)

   MIN(DISTINCT|ALL)求最小值 ALL表示对所有的值求最小值 DISTINCT表示对不同的值求最小值 相同的只取一次SQL> select min(all sal) from gao table ;

  MIN(ALLSAL)

   STDDEV(distinct|all)求标准差 ALL表示对所有的值求标准差 DISTINCT表示只对不同的值求标准差SQL> select stddev(sal) from scott emp;

  STDDEV(SAL)

  SQL> select stddev(distinct sal) from scott emp;

  STDDEV(DISTINCTSAL)

   VARIANCE(DISTINCT|ALL)求协方差

  SQL> select variance(sal) from scott emp;

  VARIANCE(SAL)

   GROUP BY主要用来对一组数进行统计SQL> select deptno count(*) sum(sal) from scott emp group by deptno;

  DEPTNO COUNT(*) SUM(SAL)

   HAVING对分组统计再加限制条件SQL> select deptno count(*) sum(sal) from scott emp group by deptno having count(*)>= ;

  DEPTNO COUNT(*) SUM(SAL) SQL> select deptno count(*) sum(sal) from scott emp having count(*)>= group by deptno ;

  DEPTNO COUNT(*) SUM(SAL)

   ORDER BY用于对查询到的结果进行排序输出SQL> select deptno ename sal from scott emp order by deptno sal desc;

  DEPTNO ENAME SAL KING CLARK MILLER SCOTT FORD JONES ADAMS SMITH BLAKE ALLEN TURNER WARD MARTIN JAMES

   pl/sql中的case语句

  select   (case   when   DUMMY= X    then      else      end)   as   flag   from   dual;

  case的第 种用法 case col when a then when b then else end这种用法跟decode一样没什么区别

  case的第 种用法 case when score < then d when score >= and score < then c when score >= and score < then b else a end

   NVL(expr expr )

  NVL(expr expr ) >expr 为NULL 返回expr 不为NULL 返回expr 注意两者的类型要一致 NVL (expr expr expr ) >expr 不为NULL 返回expr 为NULL 返回expr expr 和expr 类型不同的话 expr 会转换为expr 的类型 NULLIF (expr expr ) >相等返回NULL 不等返回expr  

 Oracle分析函数参考手册

  =============================================作者: xsb([url])[/url]发表于: : 分类: DW&BI 出处      Oracle从 开始提供分析函数 分析函数用于计算基于组的某种聚合值 它和聚合函数的不同之处是对于每个组返回多行 而聚合函数对于每个组只返回一行

  常用的分析函数如下所列: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 )

  下面例子中使用的表来自Oracle自带的HR用户下的表 如果没有安装该用户 可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main sql来创建

  除本文内容外 你还可参考 ROLLUP与CUBE [url][/url]分析函数使用例子介绍 [url][/url]

  本文如果未指明 缺省是在HR用户下运行例子 开窗函数的的理解 开窗函数指定了分析函数工作的数据窗口大小 这个数据窗口大小可能会随着行的变化而变化 举例如下 over(order by salary) 按照salary排序进行累计 order by是个默认的开窗函数over(partition by deptno)按照部门分区over(order by salary range beeen preceding and following)每行对应的数据窗口是之前行幅度值不超过 之后行幅度值不超过 over(order by salary rows beeen preceding and following)每行对应的数据窗口是之前 行 之后 行over(order by salary rows beeen unbounded preceding and unbounded following)每行对应的数据窗口是从第一行到最后一行 等效 over(order by salary range beeen unbounded preceding and unbounded following)

  主要参考资料 《expert one on one》 Tom Kyte 《Oracle i SQL Reference》第 章

  oh :  续

   AVG 功能描述 用于计算一个组和数据窗口内表达式的平均值 SAMPLE 下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告 该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来

  SELECT manager_id last_name hire_date salary AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date ROWS BEEEN PRECEDING AND FOLLOWING) AS c_mavgFROM employees;

  MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG Kochhar SEP De Haan JAN Raphaely DEC Kaufling MAY Hartstein FEB Weiss JUL Russell OCT

   CORR 功能描述 返回一对表达式的相关系数 它是如下的缩写 COVAR_POP(expr expr )/STDDEV_POP(expr )*STDDEV_POP(expr ))从统计上讲 相关性是变量之间关联的强度 变量之间的关联意味着在某种程度上一个变量的值可由其它的值进行预测 通过返回一个 ~ 之间的一个数 相关系数给出了关联的强度 表示不相关 SAMPLE 下例返回 年月销售收入和月单位销售的关系的累积系数(本例在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 = GROUP BY t calendar_month_numberORDER BY t calendar_month_number;

  CALENDAR_MONTH_NUMBER CUM_CORR

   COVAR_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_COVS FROM product_information pWHERE category_id = ORDER BY product_id supplier_id;

  PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS

   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_COVS FROM product_information pWHERE category_id = ORDER BY product_id supplier_id;

  PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS

   

   COUNT 功能描述 对一组内发生的事情进行累积计数 如果指定*或一些非空常数 count将对所有行计数 如果指定一个表达式 count返回表达式非空赋值的计数 当有相同值出现时 这些相等的值都会被纳入被计算的值 可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数 SAMPLE 下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n n+ ]之间的行数 n表示当前行的薪水例如 Philtanker的薪水 排在他之前的行中薪水大于等于 的有 行 排在他之后的行中薪水小于等于 + 的行没有 所以count计数值cnt 为 (包括自己当前行) cnt 值相当于小于等于当前行的SALARY值的所有行数

  SELECT last_name salary COUNT(*) OVER () AS cnt COUNT(*) OVER (ORDER BY salary) AS cnt COUNT(*) OVER (ORDER BY salary RANGE BEEEN PRECEDINGAND FOLLOWING) AS cnt FROM employees;

  LAST_NAME SALARY CNT CNT CNT Olson Markle Philtanker Landry Gee Colmenares Patel

   CUME_DIST 功能描述 计算一行在组中的相对位置 CUME_DIST总是返回大于 小于或等于 的数 该数表示该行在N行中的位置 例如 在一个 行的组中 返回的累计分布值为 / / / SAMPLE 下例中计算每个工种的员工按薪水排序依次累积出现的分布百分比

  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 PU_CLERK Himuro PU_CLERK Tobias PU_CLERK Baida PU_CLERK Khoo PU_MAN Raphaely

   DENSE_RANK 功能描述 根据ORDER BY子句中表达式的值 从查询返回的每一行 计算它们与其它行的相对位置 组内的数据按ORDER BY子句排序 然后给每一行赋一个号 从而形成一个序列 该序列从 开始 往后累加 每次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 ( );

  DEPARTMENT_ID LAST_NAME SALARY DRANK Lorentz Austin Pataballa Ernst Hunold Kochhar De Haan King

   FIRST 功能描述 从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行 因为值可能相等) 因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE 下面例子中DENSE_RANK按部门分区 再按佣金mission_pct排序 FIRST取出佣金最低的对应的所有行 然后前面的MAX函数从这个集合中取出薪水最低的值 LAST取出佣金最高的对应的所有行 然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name department_id salary MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY mission_pct)OVER (PARTITION BY department_id) Worst MAX(salary) KEEP (DENSE_RANK LAST ORDER BY mission_pct)OVER (PARTITION BY department_id) Best FROM employees WHERE department_id in ( ) ORDER BY department_id salary;

  LAST_NAME DEPARTMENT_ID SALARY Worst Best Fay Hartstein Kumar Banda Johnson Ande Lee Tuvault Sewall Marvins Bates

   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 employees WHERE department_id in( );

  DEPARTMENT_ID LAST_NAME SALARY LOWEST_SAL Fay Fay Hartstein Fay Colmenares Colmenares Himuro Colmenares Tobias Colmenares Baida Colmenares Khoo Colmenares Raphaely Colmenares

   LAG 功能描述 可以访问结果集中的其它行而不用进行自连接 它允许去处理游标 就好像游标是一个数组一样 在给定组中可参考当前行之前的行 这样就可以从组中与当前行一起选择以前的行 Offset是一个正整数 其默认值为 若索引超出窗口的范围 就返回默认值(默认返回的是组中第一行) 其相反的函数是LEADSAMPLE 下面的例子中列prev_sal返回按hire_date排序的前 行的salary值

  SELECT last_name hire_date salary LAG(salary ) OVER (ORDER BY hire_date) AS prev_salFROM employeesWHERE job_id = PU_CLERK ;

  LAST_NAME HIRE_DATE SALARY PREV_SAL Khoo 月 Tobias 月 Baida 月 Himuro 月 Colmenares 月

   LAST 功能描述 从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行 因为值可能相等) 因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE 下面例子中DENSE_RANK按部门分区 再按佣金mission_pct排序 FIRST取出佣金最低的对应的所有行 然后前面的MAX函数从这个集合中取出薪水最低的值 LAST取出佣金最高的对应的所有行 然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name department_id salary MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY mission_pct)OVER (PARTITION BY department_id) Worst MAX(salary) KEEP (DENSE_RANK LAST ORDER BY mission_pct)OVER (PARTITION BY department_id) Best FROM employees WHERE department_id in ( ) ORDER BY department_id salary;

  LAST_NAME DEPARTMENT_ID SALARY Worst Best Fay Hartstein Kumar Banda Johnson Ande Lee Tuvault Sewall Marvins Bates LAST_VALUE 功能描述 返回组中数据窗口的最后一个值 SAMPLE 下面例子计算按部门分区按薪水排序的数据窗口的最后一个值对应的名字 如果薪水的最后一个值有多个 则从多个对应的名字中取缺省排序的最后一个名字SELECT department_id last_name salary LAST_VALUE(last_name)OVER(PARTITION BY department_id ORDER BY salary) AS highest_salFROM employees WHERE department_id in( );

  DEPARTMENT_ID LAST_NAME SALARY HIGHEST_SAL Fay Fay Hartstein Hartstein Colmenares Colmenares Himuro Himuro Tobias Tobias Baida Baida Khoo Khoo Raphaely Raphaely

   LEAD 功能描述 LEAD与LAG相反 LEAD可以访问组中当前行之后的行 Offset是一个正整数 其默认值为 若索引超出窗口的范围 就返回默认值(默认返回的是组中第一行)SAMPLE 下面的例子中每行的 NextHired 返回按hire_date排序的下一行的hire_date值

  SELECT last_name hire_date LEAD(hire_date ) OVER (ORDER BY hire_date) AS NextHired FROM employees WHERE department_id = ;

  LAST_NAME HIRE_DATE NextHired Raphaely DEC MAY Khoo MAY JUL Tobias JUL DEC Baida DEC NOV Himuro NOV AUG Colmenares AUG

   MAX 功能描述 在一个组中的数据窗口中查找表达式的最大值 SAMPLE 下面例子中dept_max返回当前行所在部门的最大薪水值

  SELECT department_id last_name salary MAX(salary) OVER (PARTITION BY department_id) AS dept_maxFROM employees WHERE department_id in ( );

  DEPARTMENT_ID LAST_NAME SALARY DEPT_MAX Whalen Hartstein Fay Raphaely Khoo Baida Tobias Himuro Colmenares

   MIN 功能描述 在一个组中的数据窗口中查找表达式的最小值 SAMPLE 下面例子中dept_min返回当前行所在部门的最小薪水值

  SELECT department_id last_name salary MIN(salary) OVER (PARTITION BY department_id) AS dept_minFROM employees WHERE department_id in ( );

  DEPARTMENT_ID LAST_NAME SALARY DEPT_MIN Whalen Hartstein Fay Raphaely Khoo Baida Tobias Himuro Colmenares

   NTILE 功能描述 将一个组分为 表达式 的散列表示 例如 如果表达式= 则给组中的每一行分配一个数(从 到 ) 如果组中有 行 则给前 行分配 给下 行分配 等等 如果组的基数不能由表达式值平均分开 则对这些行进行分配时 组中就没有任何percentile的行数比其它percentile的行数超过一行 最低的percentile是那些拥有额外行的percentile 例如 若表达式= 行数= 则percentile= 的有 行 percentile= 的有 行等等 SAMPLE 下例中把 行数据分为 份

  SELECT last_name salary NTILE( ) OVER (ORDER BY salary DESC) AS quartile FROM employeesWHERE department_id = ;

  LAST_NAME SALARY QUARTILE Greenberg Faviet Chen Urman Sciarra Popp

   PERCENT_RANK 功能描述 和CUME_DIST(累积分配)函数类似 对于一个组中给定的行来说 在计算那行的序号时 先减 然后除以n (n为组中所有的行数) 该函数总是返回 ~ (包括 )之间的数 SAMPLE 下例中如果Khoo的salary为 则pr值为 因为RANK函数对于等值的返回序列值是一样的

  SELECT department_id last_name salary PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) AS prFROM employeesWHERE department_id < ORDER BY department_id salary;

  DEPARTMENT_ID LAST_NAME SALARY PR Whalen Fay Hartstein Colmenares Himuro Tobias Baida Khoo Raphaely Mavris

   PERCENTILE_CONT 功能描述 返回一个与输入的分布百分比值相对应的数据值 分布百分比的计算方法见函数PERCENT_RANK 如果没有正好对应的数据值 就通过下面算法来得到值 RN = + (P*(N )) 其中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 在下例中 对于部门 的Percentile_Cont值计算如下 P= N= RN = + (P*(N )= +( *( ))= CRN = CEIL( )= FRN = FLOOR( )= ( )* + ( ) * =

  SELECT last_name salary department_id PERCENTILE_CONT( ) WITHIN GROUP (ORDER BY salary) OVER (PARTITION BY department_id) Percentile_Cont PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary) Percent_Rank FROM employees WHERE department_id IN ( );

  LAST_NAME SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank Colmenares Himuro Tobias Baida Khoo Raphaely Lorentz Austin Pataballa Ernst Hunold

   PERCENTILE_DISC 功能描述 返回一个与输入的分布百分比值相对应的数据值 分布百分比的计算方法见函数CUME_DIST 如果没有正好对应的数据值 就取大于该分布值的下一个值 注意 本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同

  SAMPLE 下例中 的分布值在部门 中没有对应的Cume_Dist值 所以就取下一个分布值 所对应的SALARY来替代

  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 ( );

  LAST_NAME SALARY DEPARTMENT_ID Percentile_Disc Cume_Dist Colmenares Himuro Tobias Baida Khoo Raphaely Lorentz Austin Pataballa Ernst Hunold

   RANK 功能描述 根据ORDER BY子句中表达式的值 从查询返回的每一行 计算它们与其它行的相对位置 组内的数据按ORDER BY子句排序 然后给每一行赋一个号 从而形成一个序列 该序列从 开始 往后累加 每次ORDER BY表达式的值发生变化时 该序列也随之增加 有同样值的行得到同样的数字序号(认为null时相等的) 然而 如果两行的确得到同样的排序 则序数将随后跳跃 若两行序数为 则没有序数 序列将给组中的下一行分配值 DENSE_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 ( );

  DEPARTMENT_ID LAST_NAME SALARY DRANK Lorentz Austin Pataballa Ernst Hunold Kochhar De Haan King

   RATIO_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 Baida Tobias Himuro Colmenares

   REGR_ (Linear Regression) Functions 功能描述 这些线性回归函数适合最小二乘法回归线 有 个不同的回归函数可使用 REGR_SLOPE 返回斜率 等于COVAR_POP(expr expr ) / VAR_POP(expr )REGR_INTERCEPT 返回回归线的y截距 等于AVG(expr ) REGR_SLOPE(expr expr ) * AVG(expr )REGR_COUNT 返回用于填充回归线的非空数字对的数目REGR_R 返回回归线的决定系数 计算式为 If VAR_POP(expr ) = then return NULLIf VAR_POP(expr ) = and VAR_POP(expr ) != then return If VAR_POP(expr ) > and VAR_POP(expr != then return POWER(CORR(expr expr) )REGR_AVGX 计算回归线的自变量(expr )的平均值 去掉了空对(expr expr )后 等于AVG(expr )REGR_AVGY 计算回归线的应变量(expr )的平均值 去掉了空对(expr expr )后 等于AVG(expr )REGR_SXX 返回值等于REGR_COUNT(expr expr ) * VAR_POP(expr )REGR_SYY 返回值等于REGR_COUNT(expr expr ) * VAR_POP(expr )REGR_SXY: 返回值等于REGR_COUNT(expr expr ) * COVAR_POP(expr expr )

  (下面的例子都是在SH用户下完成的)SAMPLE 下例计算 年最后三个星期中两种产品( 和 )在周末的销售量中已开发票数量和总数量的累积斜率和回归线的截距

  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_ICPT FROM sales s times tWHERE s time_id = t time_id AND s prod_id IN ( )AND t fiscal_year= AND t fiscal_week_number IN ( )AND t day_number_in_week IN ( )ORDER BY t fiscal_month_desc t day_number_in_month;

  Month Day CUM_SLOPE CUM_ICPT

  SAMPLE 下例计算 年 月每天的累积交易数量

  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_Count FROM sales s times tWHERE s time_id = t time_id AND t fiscal_year = AND t fiscal_month_number = ;

  DAY_NUMBER_IN_MONTH Regr_Count

  SAMPLE 下例计算 年每月销售量中已开发票数量和总数量的累积回归线决定系数

  SELECT t fiscal_month_number REGR_R (SUM(s amount_sold) SUM(s quantity_sold))OVER (ORDER BY t fiscal_month_number) Regr_R FROM sales s times tWHERE s time_id = t time_idAND t fiscal_year = GROUP BY t fiscal_month_numberORDER BY t fiscal_month_number;

  FISCAL_MONTH_NUMBER Regr_R

  SAMPLE 下例计算 年 月最后两周产品 的销售量中已开发票数量和总数量的累积平均值

  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_AvgX FROM sales s times tWHERE s time_id = t time_id AND s prod_id = AND t fiscal_month_desc = AND t fiscal_week_number IN ( )ORDER BY t day_number_in_month;

  DAY_NUMBER_IN_MONTH Regr_AvgY Regr_AvgX

  SAMPLE 下例计算产品 和 在 年 月周末销售量中已开发票数量和总数量的累积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_sxx FROM sales s times tWHERE s time_id = t time_id AND prod_id IN ( )AND t fiscal_month_desc = AND t day_number_in_week IN ( )ORDER BY t day_number_in_month;

  DAY_NUMBER_IN_MONTH Regr_sxy Regr_syy Regr_sxx

   

   ROW_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 < ;

  DEPARTMENT_ID LAST_NAME EMPLOYEE_ID EMP_ID Whalen Hartstein Fay Raphaely Khoo Baida Tobias Himuro Colmenares Mavris

   STDDEV 功能描述 计算当前行关于组的标准偏离 (Standard Deviation)SAMPLE 下例返回部门 按雇佣日期排序的薪水值的累积标准偏离

  SELECT last_name hire_date salary STDDEV(salary) OVER (ORDER BY hire_date) StdDev FROM employees WHERE department_id = ;

  LAST_NAME HIRE_DATE SALARY StdDev Raphaely 月 Khoo 月 Tobias 月 Baida 月 Himuro 月 Colmenares 月

   STDDEV_POP 功能描述 该函数计算总体标准偏离 并返回总体变量的平方根 其返回值与VAR_POP函数的平方根相同 (Standard Deviation-Population)SAMPLE 下例返回部门 的薪水值的总体标准偏差

  SELECT department_id last_name salary STDDEV_POP(salary) OVER (PARTITION BY department_id) AS pop_stdFROM employeesWHERE department_id in ( );

  DEPARTMENT_ID LAST_NAME SALARY POP_STD Hartstein Fay Raphaely Khoo Baida Colmenares Himuro Tobias Hunold Ernst Austin Pataballa Lorentz

   STDDEV_SAMP 功能描述 该函数计算累积样本标准偏离 并返回总体变量的平方根 其返回值与VAR_POP函数的平方根相同 (Standard Deviation-Sample)SAMPLE 下例返回部门 的薪水值的样本标准偏差

  SELECT department_id last_name hire_date salary STDDEV_SAMP(salary) OVER (PARTITION BY department_id ORDER BY hire_date ROWS BEEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdev FROM employeesWHERE department_id in ( );

  DEPARTMENT_ID LAST_NAME HIRE_DATE SALARY CUM_SDEV Hartstein 月 Fay 月 Raphaely 月 Khoo 月 Tobias 月 Baida 月 Himuro 月 Colmenares 月 Hunold 月 Ernst 月 Austin 月 Pataballa 月 Lorentz 月

   SUM 功能描述 该函数计算组中表达式的累积和 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 ( );

  MANAGER_ID LAST_NAME SALARY L_CSUM Whalen Mavris Baer Greenberg Higgins Lorentz Austin Pataballa Ernst Popp Sciarra Urman Chen Faviet

   VAR_POP功能描述 (Variance Population)该函数返回非空集合的总体变量(忽略null) VAR_POP进行如下计算 (SUM(expr ) SUM(expr) / COUNT(expr)) / COUNT(expr)SAMPLE 下例计算 年每月销售的累积总体和样本变量(本例在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_Samp FROM sales s times tWHERE s time_id = t time_id AND t calendar_year = GROUP BY t calendar_month_desc;

  CALENDAR Var_Pop Var_Samp E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+ E+

cha138/Article/program/Oracle/201311/18274

相关参考

知识大全 110个oracle常用函数总结(1)

  ASCII  返回与指定的字符对应的十进制数;  SQL>selectascii(A)Aascii(a)aascii()zeroascii()spacefromdual;  AAZEROSP

知识大全 110个oracle常用函数总结(2)

  返回一个数字反余弦值  SQL>selectcosh()fromdual;  COSH()      EXP  返回一个数字e的n次方根  SQL>selectexp()exp()fr

知识大全 oracle常用函数汇总

以下是对oracle中的常用函数进行了汇总介绍需要的朋友可以过来参考下   一运算符算术运算符+*/可以在select语句中使用连接运算符||selectdeptno||dnamefromd

知识大全 Oracle 常用功能函数汇总

Oracle常用功能函数汇总  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  **********

知识大全 Oracle数据库常用函数(1)

Oracle数据库常用函数(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASCII  返

知识大全 VBScript常用函数总结

VBScript常用函数总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在编写QTP脚本的过

知识大全 SQL Server和Oracle的常用函数对比

SQLServer和Oracle的常用函数对比  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 oracle与sql的区别(常用函数)

  许多软件公司都理解开发不依赖于特定数据库类型(例如OracleSQLServerDB)的应用程序的重要性它可以让客户们选择自己习惯的平台一般来说软件开发人员都能够识别出他们的负责数据库维护的客户和

知识大全 基于php常用函数总结(数组,字符串,时间,文件操作)

  数组:【重点】implode(分隔arr)把数组值数据按指定字符连接起来例如$arr=array();$str=implode($arr);explode([分隔]arr)按指定规则对一个字符串进

知识大全 总结Java Web中几个函数的作用

总结JavaWeb中几个函数的作用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一Servle