2015-07-05 86 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 

当我运行此我得到的跟随着错误: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 –