Oracle関数Rank Over Partition使用例の詳細(2)
次のまとめに続きます.
3.6各科の順位(区分)を調べて、上位2位の情報、例えば:ニュースリストのクリック率が上位2条のニュースあるいは商品が上位10位の商品を販売するなど
クエリの結果:
学号
名前
科目
成績
順位
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各学生の総得点を調べる
クエリの結果:
学号
名前
合計スコア
3
張三豊
130
5
mike
80
2
李四
207
4
楊過
167
1
張三
80
3.8各学生の総得点順位を調べる
クエリの結果:
学号
名前
順位
2
李四
1
4
楊過
2
3
張三豊
3
5
mike
4
1
張三
4
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