2015-07-05 2 views
1

У меня есть три таблицы, и я хочу, чтобы запрос te выбирал имена преподавателей и количество классов, которые зарезервировал каждый преподаватель.Oracle SQL объединяет три таблицы и группу по столбцу

Учитель:

| idt | name | 

класс:

| idc | name | 

заповедник:

| idc | idt | 

Мой запрос:

select 
    t.name, count(distinct(r.idc)) 
    from 
    teacher t 
    join 
    reserve r 
    on 
    r.idt = t.idt 
    join 
    class c 
    on 
    c.idc = r.idc 
    group by r.idc 

Когда я запускаю это я получаю сообщение об ошибке: followin not a group by expression.

+1

Вы должны группировать столбцы выбора, которые являются дополнительными к агрегатной функции (в этом случае COUNT). Попробуйте сгруппировать по t.name. –

+1

'группа по t.name'. Поля 'group by' должны совпадать с полями в' select'. –

ответ

2

Предложению group by должно содержать все необобщенные столбцы из select заявления; в вашем случае это должно быть t.name. Кроме того, distinct не является функцией, а ключевым словом и не должен иметь круглых скобок.

select 
    t.name, 
    count(distinct r.idc) as number_of_classes 
from 
    teacher t 
join 
    reserve r on r.idt = t.idt 
join 
    class c on c.idc = r.idc 
group by 
    t.name 
+0

Спасибо .. @jpw –

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