If you want the sum of all subjects for each semester, wouldn't you rather want to group only by studentid and semesterid as inelect sum(subject_grade) from marks group by studentid,semesterid
Regardless, if you want to pick only the highest grade for a given subject in a given semester (question: can someone get two grades for a given subject in a single semester?) one way to do it is as follows:;with a as( select studentid, semesterid, subjectid, subjectgrade, row_number() over (partition by semsterid,subjectid order by grade desc) as rownumfrom marks)select studentid,semesterid, sum(subjectgrade) from awhere rownum = 1group by studentid, semesterid