题解 | 查询成绩 | 不使用Student表也能做
查询成绩
https://www.nowcoder.com/practice/ef30689ae065434c89c129e9dfe1b4cd
SELECT count(*) FROM ( SELECT sId FROM SC WHERE cId IN ( SELECT cId FROM Course WHERE cname IN (N'语文', N'数学', N'英语') ) GROUP BY sId HAVING SUM(score) / 3 > 60 ) AS GoodStudents
不使用Student表也能做这道题,这是因为上述代码中的第21行直接把SUM(score)除以3,不需要先获取Student表和Course表的笛卡尔积;也因为对于本题而言,学生有没有完全根本不考试并不会影响题目所要求的统计目的。
只是说这样会埋一个坑,如果以后需要统计更多科目,那还要修改第21行的分母为实际需要统计科目的数量,不太灵活。
当然,如果想要用AVG函数,那确实得老老实实先获取Student表和Course表的笛卡尔积。