0

これは私のテーブル

student_numbers

ROLL_NO NAME    CLASS   HINDI   MATHS   SCIENCE
2   amit    11  91  91  81
3   anirudh 11  88  87  81
4   akash   11  82  81  85
5   pratik  10  81  99  98
7   rekha   10  79  97  82
6   neha    10  89  91  90
8   kamal   10  66  68  69
1   ankit   11  97  98  87

最後の3つの列を追加し、クラスごとに分割された合計でランク付けしたい

これは私が試したものです

select roll_no,name,class,total,
rank() over (partition by class order by total desc) as rank
from student_numbers,(select hindi+maths+science total from student_numbers)
;

しかし、これは非常に大きなテーブルを示しており、重複する学生名の合計は異なります。

4

1 に答える 1

2

あなたが何を達成しようとしているのか正確にはわかりません -- クラスごとに最高の成績を並べますか? もしそうなら、このようなものがうまくいくはずです:

SELECT SN.Roll_No, 
   SN.Class, 
   SN2.Total, 
   RANK() OVER (PARTITION BY SN.Class ORDER BY SN2.Total DESC) as rank
FROM Student_Numbers SN
JOIN (
SELECT
   Roll_no, hindi+maths+science as Total
FROM Student_Numbers
) SN2 ON SN.Roll_No = SN2.Roll_No

これがSQL Fiddleです。

幸運を。

于 2013-01-19T23:21:26.383 に答える