2014-09-24 101 views
-3

3表是有,一个是学生,第二个是主体和第三个是马克表。如何查询以获得此结果?

student table: 
    student_id student_name 

subject table: 
    subject_id subject_name 

marks table: 
    student_id subject_id marks 

我写此查询:

select student_id, subject_id, marks, RANK() over (partition by subject_id order by marks desc rank 
from marks order by student_id, subject_id; 

它给正确的结果,但我想到位student_id数据和subject_id的student_name和SUBJECT_NAME。

如何加入这些表? 谢谢。

+5

你编写使用'排名在Partition'查询,但你不理解一个简单的'加入'概念...? – Siyual 2014-09-24 13:15:35

回答

0

只需添加一对夫妇的join条款:

SELECT student_name, subject_name, marks, 
     RANK() OVER (PARTITION BY subject_name ORDER BY marks DESC) rk 
FROM  marks 
JOIN  student ON marks.student_id = student.student_id 
JOIN  subject ON marks.subject_id = subject.subject_id 
ORDER BY student_name, subject_name 
+0

对不起,没有更新的行属性格式这就是为什么只给2 rows.Now其给出结果正确 – swapprose 2014-09-24 13:56:02

0

这可以通过简单的做加盟

select student_name, subject_name, marks, RANK() over (partition by subject_id order by marks desc) rank 
    from marks 
    inner join student on mark.student_id=student.student_id 
    inner join subject on mark.subject_id=subject.subject_id 
    order by student_id, subject_id; 
+0

它给错误暧昧student_id数据,subject_id – swapprose 2014-09-24 13:47:20