Oracle排名函數(Rank)實例詳解

--已知:兩種排名方式(分區和不分區):使用和不使用partitionsql

--兩種計算方式(連續,不連續),對應函數:dense_rank,rank查詢原始數據:學號,姓名,科目名,成績 函數

select * from t_score

·查詢各學生科目爲Oracle排名(簡單排名) spa

select sc.s_id,sc.s_name,sub_name,sc.score,
 rank() over (order by score desc) 名次
from t_score sc
where sub_name='Oracle'

 對比:rank()與dense_rank():非連續排名與連續排名(都是簡單排名) .net

select sc.s_id,sc.s_name,sub_name,sc.score,
 dense_rank() over (order by score desc) 名次
from t_score sc
where sub_name='Oracle'

·查詢各學生各科排名(分區排名) code

select sc.s_id,sc.s_name,sub_name,sc.score,
 rank() over
 (partition by sub_name order by score desc) 名次
from t_score sc

·查詢各科前2名(分區排名) blog

·相似:新聞表,求欄目點擊率在前3位的新聞。 排序

商品表,求各種別銷售額在前10位的商品。 it

select * from (
select sc.s_id,sc.s_name,sub_name,sc.score,
dense_rank() over
(partition by sub_name order by score desc) 名次
from t_score sc
) x
where x.名次<=2

&middot;查詢各同窗總分 io

select s_id,s_name,sum(score) sum_score from t_score
group by s_id,s_name

根據總分查詢各同窗名次 class

select x.*,
rank() over (order by sum_score desc) 名次
from (
select s_id,s_name,sum(score) sum_score from t_score
group by s_id,s_name ) x

語法:

rank() over (order by 排序字段 順序)

rank() over (partition by 分組字段 order by 排序字段 順序)

1.順序:asc|desc  名次與業務相關:

  示例:找求優秀學員:成績:降序  遲到次數:升序

2.分區字段:根據什麼字段進行分區。

轉載:http://blog.csdn.net/cczz_11/article/details/6053539

相關文章
相關標籤/搜索