统计修课人数应该使用GROUP BY sc.cno分组后count(distinct sno)进行计数
正确答案是C。让我们逐一分析每个选项:
A: `SELECT sc.cno,cname,count(distinct sc.cno) 修课人数,max(grade) 考试最高分 FROM course right join sc ON course.cno=sc.cno GROUP BY sno;`
问题:
- `GROUP BY sno` 是按学生编号分组,而不是按课程编号分组。
- `count(distinct sc.cno)` 计算的是不同课程编号的数量,而不是修课人数。
B: `SELECT sc.cno,cname,count(distinct sc.cno) 修课人数,max(grade) 考试最高分 FROM course right join sc ON course.cno=sc.cno GROUP BY sc.cno;`
问题:
- `count(distinct sc.cno)` 计算的是不同课程编号的数量,而不是修课人数。
C: `SELECT sc.cno,cname,count(distinct sno) 修课人数,max(grade) 考试最高分 FROM course right join sc ON course.cno=sc.cno GROUP BY sc.cno;`
正确:
- `GROUP BY sc.cno` 是按课程编号分组,这是正确的。
- `count(distinct sno)` 计算的是修课人数。
- `max(grade)` 计算的是每门课程的考试最高分。
D: `SELECT sc.cno,cname,count(distinct sno) 修课人数,max(grade) 考试最高分 FROM course right join sc ON course.cno=sc.cno GROUP BY sno;`
问题:
- `GROUP BY sno` 是按学生编号分组,而不是按课程编号分组。
所以,正确的SQL查询是:
```sql
SELECT sc.cno, cname, count(distinct sno) 修课人数, max(grade) 考试最高分
FROM course
RIGHT JOIN sc ON course.cno = sc.cno
GROUP BY sc.cno;
```