sql - To get top three names of students with marks in each subject from 2 tables in oracle db from 2 tables -
suppose have 2 tables:
1) student name , roll number
2) table roll number, subject , marks.
i want output such show me top 3 students in each subject names.
script of table can used is:
create table student ( roll_no int primary key, name varchar(20)); insert student values (1,'nikhil'); insert student values (2,'varun'); insert student values (3,'nishant'); insert student values (4,'vishal'); insert student values (5,'gourav'); insert student values (6,'hemant'); insert student values (7,'shubham'); insert student values (8,'dhawan'); insert student values (9,'gautam'); create table marks ( roll_no int, subject varchar(20), marks int); insert marks values('1','maths','92'); insert marks values('1','science','80'); insert marks values('1','english','98'); insert marks values('1','hindi','81'); insert marks values('2','maths','89'); insert marks values('2','science','100'); insert marks values('2','english','81'); insert marks values('2','hindi','82'); insert marks values('3','maths','98'); insert marks values('3','science','92'); insert marks values('3','english','88'); insert marks values('3','hindi','83'); insert marks values('4','maths','88'); insert marks values('4','science','82'); insert marks values('4','english','85'); insert marks values('4','hindi','97'); insert marks values('5','maths','94'); insert marks values('5','science','90'); insert marks values('5','english','97'); insert marks values('5','hindi','89'); insert marks values('6','maths','89'); insert marks values('6','science','82'); insert marks values('6','english','84'); insert marks values('6','hindi','85'); insert marks values('7','maths','82'); insert marks values('7','science','100'); insert marks values('7','english','92'); insert marks values('7','hindi','98'); insert marks values('8','maths','99'); insert marks values('8','science','91'); insert marks values('8','english','86'); insert marks values('8','hindi','82'); insert marks values('9','maths','100'); insert marks values('9','science','95'); insert marks values('9','english','81'); insert marks values('9','hindi','81'); thanks in advance helping need run on oracle
the below join tables , decide rank based on marks , partition them via subjects
select * (select name, subject, marks, row_number() on (partition subject order marks desc) rank student join marks on student.roll_no = marks.roll_no ) rank <= 3
Comments
Post a Comment