HiveBrain v1.2.0
Get Started
← Back to all entries
patternMinor

Student who got MAX marks in subject

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
gotstudentwhomaxsubjectmarks

Problem

I am facing one issue in getting student name who scored MAX marks in each subject.

Here are my tables below



First one is Student table having STUD_ID , STUD_NAME & Second one is MARKS table having STUD_ID, SUBJECT, MARKS.

Can you help me in getting query to retrieve STUD_NAME, SUBJECT, MAX(MARKS).
I having tried below but facing issue in getting STUD_NAME.

select SUBJECT, MAX(MARKS) as Highest
from MARKS inner join STUDENT
ON STUDENT.STUD_ID = MARKS.STUD_ID
GROUP BY SUBJECT

Solution

You can use CTE with RANK() function. Read more here:

Example:

WITH ordermarks AS (
    SELECT [STUD_ID],[SUBJECT],[MARKS], RANK() OVER (PARTITION BY [SUBJECT] ORDER BY [MARKS] DESC) AS rn
    FROM marks
)
SELECT [STUD_NAME],[SUBJECT],[MARKS]
FROM ordermarks om
JOIN Students s ON s.[STUD_ID]=om.[STUD_ID] AND rn=1

Code Snippets

WITH ordermarks AS (
    SELECT [STUD_ID],[SUBJECT],[MARKS], RANK() OVER (PARTITION BY [SUBJECT] ORDER BY [MARKS] DESC) AS rn
    FROM marks
)
SELECT [STUD_NAME],[SUBJECT],[MARKS]
FROM ordermarks om
JOIN Students s ON s.[STUD_ID]=om.[STUD_ID] AND rn=1

Context

StackExchange Database Administrators Q#116580, answer score: 3

Revisions (0)

No revisions yet.