1,617
社区成员
发帖
与我相关
我的任务
分享
SQL> with t as(
2 select '21001' id,'杨过' sname,'Oracle' c_name,90 score from dual union all
3 select '20110','张三丰','Oracle',90 from dual union all
4 select '12350','王五','Oracle',88 from dual union all
5 select '14010','李想','Oracle',69 from dual union all
6 select '10012','赵六','C++',87 from dual)
7 select id,sname,c_name,
8 rank() over (partition by c_name order by score desc) rank_1,
9 dense_rank() over (partition by c_name order by score desc) rank_2
10 from t
11 where c_name='Oracle'
12 /
ID SNAME C_NAME RANK_1 RANK_2
----- ------ ------ ---------- ----------
21001 杨过 Oracle 1 1
20110 张三丰 Oracle 1 1
12350 王五 Oracle 3 2
14010 李想 Oracle 4 3
/*
下面的两个函数都能排序,但是有点差别:
rank():出现排名相同的时候,就将排名中的位置留下来
dense_rank():它不将相同位置的名额留下来,而是在下一个排名时使用,
从上面的实例中我们已经看出来了
*/
SELECT *
FROM (SELECT id, scroe, dense_rank() over(ORDER BY score) rn FROM student)
WHERE rn <= 10;
select sum(1) over(order by score desc) seq,
code,score
from
(
select '1001' as code,80 as score
from dual
union all
select '1002',81
from dual
union all
select '1003',79
from dual
union all
select '1004',80
from dual
union all
select '1005',95
from dual
union all
select '1006',84
from dual
union all
select '1007',56
from dual
union all
select '1008',95
from dual
union all
select '1009',90
from dual
union all
select '1010',75
from dual
union all
select '1011',60
from dual
union all
select '1012',74
from dual
union all
select '1013',81
from dual
)