You are on page 1of 1

Answer to ques 1 :-

WITH RankedStudents AS (
SELECT s.name,
m.marks,
ROW_NUMBER() OVER (ORDER BY m.marks DESC) AS rank
FROM students s
INNER JOIN marks m ON s.id = m.student_id
)
SELECT name, marks
FROM RankedStudents
WHERE rank <= 10;

Answer to question 2:-

WITH RankedStudents AS (
SELECT s.name,
s.batch,
m.marks,
ROW_NUMBER() OVER (PARTITION BY s.batch ORDER BY m.marks DESC) AS rank
FROM students s
INNER JOIN marks m ON s.id = m.student_id
)
SELECT name, batch
FROM RankedStudents
WHERE rank <= 3;

You might also like