架构如下:
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;
我觉得我必须将其作为嵌套的子查询,但我不确定如何累计注册次数。
非常感谢任何帮助。
答案 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书。浏览章节可以让您了解可能的内容,然后在遇到问题时可以返回详细信息。