SQLPlus子查询难度

时间:2011-10-12 17:37:24

标签: sql oracle

架构如下:

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 个答案:

答案 0 :(得分: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;

顺便说一下,between运算符是包含的:这表示Count()> = 2和Count()< = 6,不完全是您在问题中指定的。另外,我不是自然联接的粉丝:我会内联,明确指定应该使用的标准。

考虑选择一本SQL书。浏览章节可以让您了解可能的内容,然后在遇到问题时可以返回详细信息。