Oracle関数Rank Over Partition使用例の詳細(2)


次のまとめに続きます.
 
3.6各科の順位(区分)を調べて、上位2位の情報、例えば:ニュースリストのクリック率が上位2条のニュースあるいは商品が上位10位の商品を販売するなど
--6.      (  ),        , :                    10     
select *
  from (select t.s_id   ,
               t.s_name   ,
               t.sub_name   ,
               t.score   ,
               dense_rank() over(partition by t.sub_name order by score desc nulls last)   
          from t_score t) a
 where a.   <= 2;

クエリの結果:
 
学号
名前
科目
成績
順位
4
楊過
JAVA
90.00
1
4
楊過
Oracle
77.00
1
2
李四
Oracle
77.00
1
3
張三豊
Oracle
0.00
2
5
mike    
c++
80.00
1
2
李四
数学
80.00
1
1
張三
数学
0.00
2
3
張三豊
スポーツ
120.00
1
1
張三
国語
80.00
1
2
李四
国語
50.00
2
 
3.7各学生の総得点を調べる
--7.       
select t.s_id   ,
       t.s_name   , /*t.sub_name   , t.score   , */
       sum(nvl(t.score, 0))   
  from t_score t
 group by t.s_id, t.s_name;

クエリの結果:
 
学号
名前
合計スコア
3
張三豊
130
5
mike    
80
2
李四
207
4
楊過
167
1
張三
80
 
3.8各学生の総得点順位を調べる
--8.         
select a.  , a.  ,rank() over(order by a.   desc)   
  from (select t.s_id   ,
               t.s_name   , /*t.sub_name   , t.score   , */
               sum(nvl(t.score, 0))   
          from t_score t
         group by t.s_id, t.s_name) a;

クエリの結果:
 
学号
名前
順位
2
李四
1
4
楊過
2
3
張三豊
3
5
mike    
4
1
張三
4