在SC表(包括学号Sno,课程号Cno,成绩Grade)中统计每门课程成绩均在 80 分以上的各学生平均分
时间: 2023-06-25 17:04:56 浏览: 133
可以使用以下SQL语句来实现:
```
SELECT Sno, AVG(Grade) AS AvgGrade
FROM SC
WHERE Cno IN (
SELECT Cno
FROM SC
WHERE Grade >= 80
GROUP BY Cno
)
GROUP BY Sno
HAVING AVG(Grade) >= 80;
```
解释如下:
首先,内层子查询会筛选出成绩均在80分以上的课程号,使用GROUP BY Cno对课程号进行分组,并使用WHERE子句过滤出符合条件的数据。
接着,外层主查询会使用INNER JOIN连接SC表和内层子查询的结果集,连接条件为Cno。然后,使用GROUP BY Sno对学生编号进行分组,并使用AVG函数计算每个学生的平均成绩。
最后,使用HAVING子句过滤出平均成绩在80分以上的学生记录。
相关问题
在sc表中创建存储过程p2根据学号SNO查询相应学号的学生的所有个人成绩,在sc表中有学号SNO,课程号CNO以及成绩GRADE三个字段
好的,我了解了你的要求,下面是针对你的问题的SQL语句:
CREATE PROCEDURE p2 (@sno varchar(10))
AS
SELECT S.SNO, S.SNAME, C.CNO, C.CNAME, SC.GRADE
FROM SC SC
INNER JOIN S S ON S.SNO = SC.SNO
INNER JOIN C C ON C.CNO = SC.CNO
WHERE SC.SNO = @sno;
这个存储过程会返回给你表 SC 中学号为 @sno 的学生的所有个人成绩,包括学生姓名、课程名称等信息。希望这能够帮助到你!
表SC 列名有Sno作学号 Cno作选课课程号 Grade作成绩 查询选修课程数大于等于2的学生的学号、平均成绩和选课门 数,并按平 均成绩降序排列SQL查询
以下是你所需的 SQL 查询:
```
SELECT Sno, AVG(Grade) AS AvgGrade, COUNT(DISTINCT Cno) AS CourseCount
FROM SC
GROUP BY Sno
HAVING COUNT(DISTINCT Cno) >= 2
ORDER BY AvgGrade DESC;
```
这个查询首先从 SC 表中选出学号(Sno)、成绩(Grade)和课程号(Cno)列。然后,它按照学号进行分组,并计算平均成绩和选课门数。最后,筛选出选修课程数大于等于2的学生,并按照平均成绩降序排列输出结果。