考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

设数据库中有以下三张表:sc(sno,cno,grade),course(cno,cname,hours),student(sno,sname,ssex,sage,sdept)。试用SQL语言写出以下查询。 统计每门课程的修课人数和考试最高分
A. SELECT sc.cno,cname,count(distinct sc.cno) 修课人数,max(grade) 考试最高分FROM course right join sc ON course.cno=sc.cno GROUP BY sno;
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;
C. SELECT sc.cno,cname,count(distinct sno) 修课人数,max(grade) 考试最高分FROM course right join sc ON course.cno=sc.cno GROUP BY sc.cno;
D. SELECT sc.cno,cname,count(distinct sno) 修课人数,max(grade) 考试最高分FROM course right join sc ON course.cno=sc.cno GROUP BY sno;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

统计修课人数应该使用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;
```