2017-02-02 3 views
0

я следующие две схемы:Как связать группу по счету от одного отношения к другому отношению?

advisor(s_ID, i_ID) 
instructor(ID, name, dept_name, credits) 

Я подсчитал общее количество i_ID вхождений для каждого отдельного i_ID следующим образом:

SELECT i_ID, count(*) 
FROM advisor 
GROUP BY i_ID; 

Каждый i_ID принадлежит к dept_name. Как получить общий счет для появления названий каждого отдела?

Пример:

i_ID  count 
21   3 
23   4 
27   1 
29   5 

Пусть i_ID 21,23 принадлежат инструкторам (ID, физика) и i_ID 27,29 принадлежат инструкторам (ID), химия, то выход будет:

dept_name count 
physics  7(3+4) 
chemistry  6(1+5) 
+0

i_ID - это внешний ключ. я прав ? –

+0

да, вы правы. –

+0

хотя он назван ID в инструкторе. –

ответ

2

Я надеюсь, что это помогает.

select dept name, 0 as total advised 
from (select dept name from department 
minus 
select dept name 
from instructor) 
union 
select dept name, count(*) as total advised 
from instructor, advisor 
where instructor.id = advisor.I ID 
group by dept name 
order by dept name; 
0

попробовать это

select a.dept_name,count(*) as count from instructor a join advisor b 
    on a.ID=b.i_ID group by a.ID