2017-08-15 69 views
-1
得到与标记学生的顶部三个名字从Oracle数据库中2代表各科目

假设我有两个表:
1)学员姓名和卷号
2)表与卷号,主题和标记。为了从2个表

我想要得到的输出,它会显示每个学科名称前3名的学生。

表的脚本,可用于为:

CREATE TABLE STUDENT (ROLL_NO INT PRIMARY KEY, NAME VARCHAR(20)); 
INSERT INTO STUDENT VALUES (1,'NIKHIL'); 
INSERT INTO STUDENT VALUES (2,'VARUN'); 
INSERT INTO STUDENT VALUES (3,'NISHANT'); 
INSERT INTO STUDENT VALUES (4,'VISHAL'); 
INSERT INTO STUDENT VALUES (5,'GOURAV'); 
INSERT INTO STUDENT VALUES (6,'HEMANT'); 
INSERT INTO STUDENT VALUES (7,'SHUBHAM'); 
INSERT INTO STUDENT VALUES (8,'DHAWAN'); 
INSERT INTO STUDENT VALUES (9,'GAUTAM'); 


CREATE TABLE MARKS (ROLL_NO INT, SUBJECT VARCHAR(20), MARKS INT); 
INSERT INTO MARKS VALUES('1','MATHS','92'); 
INSERT INTO MARKS VALUES('1','SCIENCE','80'); 
INSERT INTO MARKS VALUES('1','ENGLISH','98'); 
INSERT INTO MARKS VALUES('1','HINDI','81'); 
INSERT INTO MARKS VALUES('2','MATHS','89'); 
INSERT INTO MARKS VALUES('2','SCIENCE','100'); 
INSERT INTO MARKS VALUES('2','ENGLISH','81'); 
INSERT INTO MARKS VALUES('2','HINDI','82'); 
INSERT INTO MARKS VALUES('3','MATHS','98'); 
INSERT INTO MARKS VALUES('3','SCIENCE','92'); 
INSERT INTO MARKS VALUES('3','ENGLISH','88'); 
INSERT INTO MARKS VALUES('3','HINDI','83'); 
INSERT INTO MARKS VALUES('4','MATHS','88'); 
INSERT INTO MARKS VALUES('4','SCIENCE','82'); 
INSERT INTO MARKS VALUES('4','ENGLISH','85'); 
INSERT INTO MARKS VALUES('4','HINDI','97'); 
INSERT INTO MARKS VALUES('5','MATHS','94'); 
INSERT INTO MARKS VALUES('5','SCIENCE','90'); 
INSERT INTO MARKS VALUES('5','ENGLISH','97'); 
INSERT INTO MARKS VALUES('5','HINDI','89'); 
INSERT INTO MARKS VALUES('6','MATHS','89'); 
INSERT INTO MARKS VALUES('6','SCIENCE','82'); 
INSERT INTO MARKS VALUES('6','ENGLISH','84'); 
INSERT INTO MARKS VALUES('6','HINDI','85'); 
INSERT INTO MARKS VALUES('7','MATHS','82'); 
INSERT INTO MARKS VALUES('7','SCIENCE','100'); 
INSERT INTO MARKS VALUES('7','ENGLISH','92'); 
INSERT INTO MARKS VALUES('7','HINDI','98'); 
INSERT INTO MARKS VALUES('8','MATHS','99'); 
INSERT INTO MARKS VALUES('8','SCIENCE','91'); 
INSERT INTO MARKS VALUES('8','ENGLISH','86'); 
INSERT INTO MARKS VALUES('8','HINDI','82'); 
INSERT INTO MARKS VALUES('9','MATHS','100'); 
INSERT INTO MARKS VALUES('9','SCIENCE','95'); 
INSERT INTO MARKS VALUES('9','ENGLISH','81'); 
INSERT INTO MARKS VALUES('9','HINDI','81'); 

Run It Here

预先感谢帮助 我需要在Oracle上运行它

+0

它不是家庭作业或项目,我昨天被某人问过这个问题,我正在找到一种方法来获得这个答案,所以试着我第一次做了表格脚本,以便我可以玩它,但我无法获得正确的答案,所以我想在这里发布它 –

回答

1

下面将加入表,并决定基于标记的排名并通过主题划分它们

SELECT * 
FROM 
    (SELECT name, 
     subject, 
     marks, 
     row_number() over (partition BY subject order by marks DESC) rank 
    FROM student 
    JOIN marks 
    ON student.roll_no = marks.roll_no 
    ) 
WHERE rank <= 3