语法没什么错,要统计查询出来的记录数,一步应该没法完成的,你的第二条语句系统应该是给出的每个group 分组的记录数,而不是你想要的一个总记录数,如果支持子查询的话可以:
select count(*) from (select a.id,a.coursecode from course_subject a ,course_selection cs where a.id = cs.cid group by a.id  having count(cs.cid)<a.maxstu) as aaa;