-- -- -- -- -- row_number rank dense_rank 3者区别-- -- -- -- --
-- Question_1: 男女成绩排行榜 http://www.iteye.com/topic/1029921
-- 不涉及并列排名(前3名)
select *
from (select id
,name
,gender
,grade
,row_number() over(partition by gender order by grade desc) row_number
from t_stu)
where row_number <= 3;
-- 涉及并列排名(并列排名后的下一记录不连续)
-- 1, 2, 2, 4
select id
,name
,gender
,grade
,rank() over(partition by gender order by grade desc) rank
from t_stu;
-- 涉及并列排名(并列排名后的下一记录连续)
-- 1, 2, 2, 3
select id
,name
,gender
,grade
,dense_rank() over(partition by gender order by grade desc) dense_rank
from t_stu;
-- -- -- -- -- connect by [prior] start with -- -- -- -- --
select * from t_dept tb;
-- Question_2: 部门2及其所有下级部门
select lpad(' ', 2 * (level - 1), ' ') || dept_id as dept_id
,parent_id
,dept_name
,amount
from t_dept
connect by parent_id = prior dept_id -- 找出所有PARENT_ID等于当前记录DEPT_ID的记录。
start with dept_id = 2;
-- Question_3: 部门2及其所有上级部门
select lpad(' ', 2 * (level - 1), ' ') || dept_id as dept_id
,parent_id
,dept_name
,amount
from t_dept
connect by prior parent_id = dept_id -- 左'上'右'下'
start with dept_id = 2;
select lpad(' ', 2 * (level - 1), ' ') || dept_id as dept_id
,parent_id
,dept_name
,amount
from t_dept
start with dept_id = 1
connect by parent_id = prior dept_id
and dept_id <> 3 -- 不包括部门3及其下属部门
;
select lpad(' ', 2 * (level - 1), ' ') || dept_id as dept_id
,parent_id
,dept_name
,amount
from t_dept
start with dept_id = 1
connect by parent_id = prior dept_id
order siblings by amount asc; -- 注意 order siblings by 用法
-- -- -- -- -- 分页 -- -- -- -- --
select *
from (select id
,name
,gender
,grade
,row_number() over(order by id) row_number
from t_stu)
where row_number between 5 and 10;
select *
from (select rownum rn, tb.* from (select * from t_stu) tb)
where rn between 5 and 10;
-- 性能高
select id, name, gender, grade
from (select id, name, gender, grade, rownum rn
from t_stu
where rownum <= 10)
where rn >= 5;