2014-09-24 2 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_name и subject_name вместо student_id и subject_id.

Как присоединиться к этим таблицам? Спасибо.

+5

Вы пишете запрос, который использует 'ранг над Partition', но вы этого не сделаете понять простую концепцию «Присоединиться» ...? – Siyual

ответ

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 строки. Теперь его результаты дают правильно – swapprose

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

Смежные вопросы