繁体   English   中英

需要帮助编写SQL查询(连接,子查询)

[英]Need help writing SQL queries(joins, subqueries)

鉴于以下架构,我应该为问题编写查询。

我的第一个查询运行,但我没有得到结果,第二个subquery returns more than one row给出subquery returns more than one row错误。

student (sid, sname, sex, birthdate, gpa)
prof (pname, dname)
course (cnum, dname, cname)
section (cnum, secnum, pname)
enroll (sid, cnum, secnum, grade)
  1. 对于每门课程,返回部分的数量(numsections),注册的学生总数(numstudents),平均成绩(avggrade),以及教授课程的不同教授的数量(numprofs)。 仅展示化学或计算机科学系的课程。 即使没有学生,也一定要出示课程。 如果没有教授该课程的教授,请不要展示课程。

  2. 返回至少在两门课程中获得高于其课程部分平均成绩的学生。 按课程数量排序高于平均数,仅显示前5名。

SQL查询:

SELECT C.cnum, C.cname, COUNT(*) AS numsections, COUNT(E.sid) AS numstudents, 
AVG(E.grade) AS avggrade, COUNT(P.pname) AS numprofs
FROM course C 
    JOIN section S ON C.cnum = S.cnum
    JOIN enroll E ON C.cnum = E.cnum
    JOIN prof P ON S.pname = P.pname
WHERE C.cname = 'Chemistry' OR C.cname = 'Computer Science'
GROUP BY C.cnum, C.cname;`


SELECT S.sid, S.sname
FROM student S 
     LEFT JOIN enroll E ON S.sid = E.sid
WHERE E.grade > (SELECT AVG(grade)
                FROM course C JOIN enroll E2
                ON C.cnum = E2.cnum
                GROUP BY C.cnum
                LIMIT 5);`

关于第二个查询......

您的子查询获得的行数超过1行。 要使用“<”,您需要确保只带一行而且只有一列。

如果我理解正确,你只需要按照优于课程平均数的次数来显示前五名学生的顺序。我认为这是一个学习的例子,所以如果我给你查询它就不会有帮助。 。

您需要选择前5名学生,但要知道您必须COUNT()他们的GRADE大于他们所学过的每门课程的AVG()的次数,在您的子查询中的某个时刻,您应该拥有学生名单按照他们达到平均水平的次数排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM