虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > Oracle数据库 > oracle统计函数学习

oracle统计函数学习
类别:Oracle数据库   作者:码皇   来源:互联网   点击:

oracle统计函数学习数据库准备Java代码 CREATE TABLE emp ( deptno int NOT NULL, ename varchar(100) DEFAULT NULL, sal int DEFAULT NULL ); insert into emp values (10,& 39;KI
oracle统计函数学习   数据库准备 Java代码   CREATE TABLE emp (     deptno int NOT NULL,     ename varchar(100) DEFAULT NULL,     sal int DEFAULT NULL   );      insert into emp values (10,'KING',5000);   insert into emp values (10,'CLARK',2450);   insert into emp values (10,'MILLER',1300);   insert into emp values (20,'SCOTT',3000);   insert into emp values (20,'FORD',3000);   insert into emp values (20,'JONES',2975);   insert into emp values (20,'ADAMS',1100);   insert into emp values (20,'SMITH',800);   insert into emp values (30,'BLAKE',2850);   insert into emp values (30,'ALLEN',1600);   insert into emp values (30,'TURNER',1500);   insert into emp values (30,'WARD',1250);   insert into emp values (30,'MARTIN',1250);   insert into emp values (30,'JAMES',950);     1.row_number() 的使用   原表信息: Java代码   select deptno, ename, sal from emp order by deptno, sal desc;     Java代码       DEPTNO  ENAME   SAL   1   10  KING    5000   2   10  CLARK   2450   3   10  MILLER  1300   4   20  SCOTT   3000   5   20  FORD    3000   6   20  JONES   2975   7   20  ADAMS   1100   8   20  SMITH   800   9   30  BLAKE   2850   10  30  ALLEN   1600   11  30  TURNER  1500   12  30  WARD    1250   13  30  MARTIN  1250   14  30  JAMES   950    使用row_number()查出各部门薪水最高的三个员工姓名、薪水,多于三个的只取三个。 Java代码       DEPTNO  RW  ENAME   SAL   1   10  1   KING    5000   2   10  2   CLARK   2450   3   10  3   MILLER  1300   4   20  1   SCOTT   3000   5   20  2   FORD    3000   6   20  3   JONES   2975   7   30  1   BLAKE   2850   8   30  2   ALLEN   1600   9   30  3   TURNER  1500    体会:row_number() 返回的主要是“行”的信息,并没有按照sal排名,如         20          1 SCOTT            3000                     2 FORD             3000 scott与ford薪水一样多,ford前面的2仅仅是行数、记录条数的感念。   2.rank()、dense_rank() 的使用   使用rank()查出各部门薪水前三名的员工姓名、薪水。   Java代码   select *     from (select deptno,                  rank() over(partition by deptno order by sal desc) rk,                  ename,                  sal             from emp)    where rk <= 3     Java代码       DEPTNO  RK  ENAME   SAL   1   10  1   KING    5000   2   10  2   CLARK   2450   3   10  3   MILLER  1300   4   20  1   SCOTT   3000   5   20  1   FORD    3000   6   20  3   JONES   2975   7   30  1   BLAKE   2850   8   30  2   ALLEN   1600   9   30  3   TURNER  1500     使用dense_rank()查出各部门薪水前三名的员工姓名、薪水。   Java代码   select *     from (select deptno,                  dense_rank() over(partition by deptno order by sal desc) drk,                  ename,                  sal             from emp)    where drk <= 3       Java代码       DEPTNO  DRK ENAME   SAL   1   10  1   KING    5000   2   10  2   CLARK   2450   3   10  3   MILLER  1300   4   20  1   SCOTT   3000   5   20  1   FORD    3000   6   20  2   JONES   2975   7   20  3   ADAMS   1100   8   30  1   BLAKE   2850   9   30  2   ALLEN   1600   10  30  3   TURNER  1500    Oracle统计函数(一)--Rank和Dense_Rank 分类:Oracle数据库 聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值。 在9i版本之前,只有分析功能(analytic ),即从一个查询结果中计算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。 其语法为: RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 在9i版本新增加了合计功能(aggregate),即对给定的参数值在设定的排序查询中计算出其排序值。这些参数必须是常数或常值表达式,且必须和ORDER BY子句中的字段个数、位置、类型完全一致。 其语法为: RANK ( expr [, expr]... ) WITHIN GROUP ( ORDER BY expr [ DESC | ASC ] [NULLS { FIRST | LAST }] [, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]... )  
相关热词搜索: oracle 统计 函数