2011-10-12 63 views
0

的模式如下:的SQLPlus子查詢難度

STUDENT(*snum: integer, sname: string, major: string, slevel: string, age: integer) 
CLASS(*name: string, meets_at: date, room: string, fid: integer) 
ENROLLED(*snum:integer, *cname: string) 
FACULTY(*fid: integer, fname: string, deptid: integer) 
DEPARTMENT (*deptid: integer,dname: string, Location:string) 

(The fields with '*' are primary keys.) 

我想找到教職員工的名字對他們來說,他們所教科目的綜合入學率小於6個,比2 ,並打印合並的註冊。

我寫了下面的查詢,正確找到教員,但我無法弄清楚如何打印聯合註冊。

SELECT fname FROM (faculty NATURAL JOIN class) JOIN enrolled ON(name = cname) GROUP BY fid, fname HAVING COUNT(*) BETWEEN 2 and 6; 

我覺得我必須做出這樣的嵌套子查詢,但我不知道怎麼總招生數。

任何幫助最受讚賞。

回答

1

您可以在您的SELECT子句聚集:

SELECT 
    fname, 
    COUNT(*) AS EnrollmentCount 
FROM (faculty NATURAL JOIN class) 
JOIN enrolled 
ON(name = cname) 
GROUP BY fid, fname 
HAVING COUNT(*) BETWEEN 2 and 6; 

順便說一句,在運營商之間的包容性:這個說伯爵()> = 2,計數()< = 6,不太你在你的問題中指定了什麼。另外,我不是自然連接的粉絲:我會內連接和明確指定應該使用什麼標準。

想想拿起一本SQL書。瀏覽各章可以讓你瞭解什麼是可能的,然後在遇到問題時可以返回細節。

+0

感謝您指出包容性。我想知道爲什麼我的查詢仍然返回太多值...解決了它。 – Jon