简体   繁体   中英

How to aggregate top 5 numbers in SQL Server 2000

Hi i I am facing a problem, it is that the students can have more than 5 subjects but i have to sum of only 5 subjects total marks of which the student secured the highest. One way to say sum of top 5 total marks obtained by any student.

在此处输入图片说明

How do i proceed please help me. Thanks in advance.

In SQL 2000 you will need to use a subselect to determine how many rows with the same ID have a higher mark. Then Filter for rows that have less then 5 higher marked rows above it:

select 
  ID, Sum(Mark)
From Table1 t
where 
(Select count(*) 
     from Table1 it 
    where it.id=t.id and it.mark>t.mark) <5
group by ID

ROW_NUMBER isn't in sql-server-2000 unfortunately. You can achieve the same result with a subquery though. Hopefully this is what you're looking for:

SELECT s.studentid, SUM(s.total_marks)
FROM students s
WHERE s.sub_code IN (SELECT TOP 5 sub_code 
                     FROM students a 
                     WHERE a.studentid = s.studentid
                     ORDER BY total_marks DESC)
GROUP BY studentid

Working in fiddle

Here is a query that gives you only the 5 hightest marks per student:

  SELECT studentID, total_marks, 
         row_number() OVER (PARTITION BY studentID, ORDER BY total_marks DESC) as rowN
  FROM studentTable
  WHERE rowN <= 5

So to get the total:

SELECT studentID, SUM(total_marks)
FROM
(      
  SELECT studentID, total_marks, 
         row_number() OVER (PARTITION BY studentID, ORDER BY total_marks DESC) as rowN
  FROM studentTable
  WHERE rowN <= 5
) T
GROUP BY studentID

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM