формирование позиций по оценкам, полученным по каждому предмету студентом в классе - PullRequest
0 голосов
/ 08 января 2019

У меня есть таблица результатов студенческого экзамена, в которой хранятся оценки студентов. Теперь я хочу рассчитывать позиции на основе наивысших оценок студента.

select er.student_id, first_name, class_id, subject_id, subsubject_id,
       sum(total_marks) totalmarks, sum(marks_obtained) obtainedmarks, (0) Position
from Exam_Results er inner join
     student s
     on er.student_id = s.student_id
where class_id = 272     
group by er.student_id, session_id, shift_id, class_id, subclass_id, term_id, catagory_id, exam_type_id, subject_id, subsubject_id, first_name
order by student_id desc

enter image description here

Ответы [ 3 ]

0 голосов
/ 08 января 2019

выберите er.student_id, first_name, class_id, subject_id, subsubject_id, сумма (общая_марки) итоговая оценка, сумма (отмеченная_обнаруженная) полученная отметка, DENSE_RANK () OVER (ORDER BY sum (marks_obtained) desc) в качестве позиции из Exam_Results er внутреннее соединение ученики на er.student_id = s.student_id где class_id = 272
группировать по er.student_id, session_id, shift_id, class_id, subclass_id, term_id, catagory_id, exam_type_id, subject_id, subsubject_id, first_name заказ по student_id desc

Пожалуйста, попробуйте этот запрос. Я думаю, что это должно решить вашу проблему, так как я сам попробовал это для ожидаемого результата.

0 голосов
/ 08 января 2019

Если вы просто хотите получить ранжирование на основе агрегации, вам не нужен подзапрос или CTE. Просто сделай:

select er.student_id, first_name, class_id, subject_id, subsubject_id,
       sum(total_marks) as totalmarks, sum(marks_obtained) as obtainedmarks,
       dense_rank() over (order by sum(total_marks) desc) as Position
from Exam_Results er inner join
     student s
     on er.student_id = s.student_id
where class_id = 272     
group by er.student_id, session_id, shift_id, class_id, subclass_id, term_id, catagory_id, exam_type_id, subject_id, subsubject_id, first_name
order by student_id desc;
0 голосов
/ 08 января 2019

Вы можете попробовать следующий запрос.

Select er.student_id, first_name, class_id, subject_id, subsubject_id,
t1.totalmarks, t1.obtainedmarks, 
DENSE_RANK() OVER (ORDER BY totalmarks) as position 
from Exam_Results er 
inner join student s on er.student_id = s.student_id
inner join(select student_id, sum(total_marks) totalmarks, 
sum(marks_obtained) obtainedmarks from Exam_Results group by student_id) t1
on t1.student_id=s.student_id
where class_id = 272
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...