oracle 中使用row_numer(),rank()及dense_rank()排序的区别

好久没有写了,那是因为我没碰到觉得可以分享的东西呢。

今天呢我们来看看oracle中使用row_numer(),rank()以及dense_rank()排序的区别。在最近的开发中遇到一个需要排名的列表。然后对我们上述的几个排序函数进行了了解。

首先我们来准备一下数据。先建立个测试表。如下:

REATE TABLE "TEST_EMP" 
(
   "EMPNO"              NUMBER(4,0),
   "ENAME"              VARCHAR2(10),
   "JOB"                VARCHAR2(9),
   "MGR"                NUMBER(4,0),
   "HIREDATE"           DATE,
   "SAL"                NUMBER(7,2),
   "COMM"               NUMBER(7,2),
   "DEPTNO"             NUMBER(2,0)
);

COMMENT ON COLUMN "TEST_EMP"."EMPNO" IS
'员工ID';

COMMENT ON COLUMN "TEST_EMP"."ENAME" IS
'员工姓名';

COMMENT ON COLUMN "TEST_EMP"."JOB" IS
'职位';

COMMENT ON COLUMN "TEST_EMP"."MGR" IS
'员工管理者ID';

COMMENT ON COLUMN "TEST_EMP"."HIREDATE" IS
'入职日期';

COMMENT ON COLUMN "TEST_EMP"."SAL" IS
'薪资';

COMMENT ON COLUMN "TEST_EMP"."COMM" IS
'绩效';

COMMENT ON COLUMN "TEST_EMP"."DEPTNO" IS
'部门ID';

插入一些数据。自己随便加一些就好。如下:

图1-1

第一个,row_numer(),这个排序函数的特点是相同数据,先查出的排名在前,没有重复值。像我们这里呢sal相同,先查出来的数据的rank排名优先。如下图:1-2

第二个,rank()函数,是跳跃排序,相同数据(这里为sal列相同)排名相同,比如并列第1,则两行数据(这里为rank列)都标为1,下一位将是第3名.中间的2被直接跳过了。排名存在重复值。

1-3

第三个,dense_rank(),这个是连续排序的,比如两条并列第1,则两行数据(这里为rank列)都标为1,下一个排名将是第2名。

1-4

这就是它们三之间的排序的一点区别。当然,分析函数over()也是值得我们好好去了解的。

你可能感兴趣的:(ORACLE)