SELECT b.*,
RANK () over (PARTITION by B.dname ORDER by B.sal) as Rank_num,
Dense_rank () over (PARTITION by B.dname ORDER by B.sal) as Dence_rank,
MIN (SAL) KEEP (Dense_rank first ORDER by B.sal) through (PARTITION by B.dname) as First_val,
MAX (SAL) KEEP (Dense_rank last ORDER by B.sal) through (PARTITION by B.dname) as Last_val,
LAG (Sal, 1, 0) over (PARTITION by B.dname ORDER by B.sal) as Pre_val,
Leads (SAL, 1, 0) over (PARTITION by B.dname ORDER by B.sal) as Following_val,
First_value (B.sal) over (PARTITION by B.dname ORDER by B.sal) as First_val,
First_value (B.sal) over (PARTITION by B.dname ORDER by B.sal DESC) as First_val_desc,
Last_value (B.sal) over (PARTITION by B.dname ORDER by B.sal) as Last_val,
Last_value (B.sal) over (PARTITION by B.dname ORDER by B.sal DESC) as Last_val_desc,
Row_number () over (PARTITION by B.dname ORDER by B.sal) as Row_num
From B
Oracle Analytic functions-rank functions