Rank, Percent_Rank, and Cume_Dist, NTILE : PERCENT_RANK « Analytical Functions « Oracle PL / SQL






Rank, Percent_Rank, and Cume_Dist, NTILE

 


SQL>
SQL> -- create demo table
SQL> create table Employee(
  2    empno              Number(3)  NOT NULL, -- Employee ID
  3    ename              VARCHAR2(10 BYTE),   -- Employee Name
  4    hireDate          DATE,                -- Date Employee Hired
  5    orig_salary        Number(8,2),         -- Orignal Salary
  6    curr_salary        Number(8,2),         -- Current Salary
  7    region             VARCHAR2(1 BYTE)     -- Region where employeed
  8  )
  9  /

Table created.

SQL>
SQL>
SQL> -- prepare data for employee table
SQL> insert into Employee(empno,  ename,  hireDate,                   orig_salary, curr_salary, region)
  2                values(122,'Alison',to_date('19960321','YYYYMMDD'), 45000,       NULL,       'E')
  3  /

1 row created.

SQL> insert into Employee(empno,  ename,  hireDate,                       orig_salary, curr_salary, region)
  2                values(123, 'James',to_date('19781212','YYYYMMDD'), 23000,       32000,       'W')
  3  /

1 row created.

SQL> insert into Employee(empno,  ename,  hireDate,                       orig_salary, curr_salary, region)
  2                values(104,'Celia',to_date('19821024','YYYYMMDD'), NULL,       58000,        'E')
  3  /

1 row created.

SQL> insert into Employee(empno,  ename,  hireDate,                       orig_salary, curr_salary, region)
  2                values(105,'Robert',to_date('19840115','YYYYMMDD'), 31000,      NULL,        'W')
  3  /

1 row created.

SQL> insert into Employee(empno,  ename,  hireDate,                       orig_salary, curr_salary, region)
  2                values(116,'Linda', to_date('19870730','YYYYMMDD'), NULL,       53000,       'E')
  3  /

1 row created.

SQL> insert into Employee(empno,  ename,  hireDate,                       orig_salary, curr_salary, region)
  2                values(117,'David', to_date('19901231','YYYYMMDD'), 78000,       NULL,       'W')
  3  /

1 row created.

SQL> insert into Employee(empno,  ename,  hireDate,                       orig_salary, curr_salary, region)
  2                values(108,'Jode',  to_date('19960917','YYYYMMDD'), 21000,       29000,       'E')
  3  /

1 row created.

SQL>
SQL> -- display data in the table
SQL> select * from Employee
  2  /

     EMPNO ENAME      HIREDATE  ORIG_SALARY CURR_SALARY R
---------- ---------- --------- ----------- ----------- -
       122 Alison     21-MAR-96       45000             E
       123 James      12-DEC-78       23000       32000 W
       104 Celia      24-OCT-82                   58000 E
       105 Robert     15-JAN-84       31000             W
       116 Linda      30-JUL-87                   53000 E
       117 David      31-DEC-90       78000             W
       108 Jode       17-SEP-96       21000       29000 E

7 rows selected.

SQL>
SQL>
SQL>
SQL> --The use of NTILE with a small amount of data like we have done here is poor statistics, but a reasonable database demonstration. To truly deal with NTILE in a statistical sense, we'd have to use a lot more data.
SQL>
SQL> --What about nulls with the NTILE function? Here is an example using the same query on our Employee table with nulls (Empwnulls):
SQL>
SQL> SELECT ename, curr_salary sal,
  2    ntile(2) OVER(ORDER BY curr_salary desc) n2,
  3    ntile(3) OVER(ORDER BY curr_salary desc) n3,
  4    ntile(4) OVER(ORDER BY curr_salary desc) n4,
  5    ntile(5) OVER(ORDER BY curr_salary desc) n5,
  6    ntile(6) OVER(ORDER BY curr_salary desc) n6,
  7    ntile(8) OVER(ORDER BY curr_salary desc) n8
  8  FROM employee;

ENAME             SAL         N2         N3         N4         N5         N6         N8
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
Alison                         1          1          1          1          1          1
Robert                         1          1          1          1          1          2
David                          1          1          2          2          2          3
Celia           58000          1          2          2          2          3          4
Linda           53000          2          2          3          3          4          5
James           32000          2          3          3          4          5          6
Jode            29000          2          3          4          5          6          7

7 rows selected.

SQL>
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee;

Table dropped.

SQL>
SQL>
           
         
  








Related examples in the same category

1.PERCENT_RANK(): calculate the percent rank of a value relative to a group of values
2.Percent_rank (PR) = (Rank-1)/(Number of rows-1)
3.rank and percent_rank