查询平均成绩最高的同学(MSSQL)
本题目要求编写SQL语句,查询平均成绩最高的同学的学号,姓名,性别,年龄及平均成绩。注意:假设以当前系统时间为2020年来计算学生年龄。提示:MSSQLServer 评测SQL语句。请在这里写定义表结构的SQL语句。...
·
本题目要求编写SQL语句,查询平均成绩最高的同学的学号,姓名,性别,年龄及平均成绩。
注意:假设以当前系统时间为2020年来计算学生年龄。
提示:MSSQLServer 评测SQL语句。
表结构:
请在这里写定义表结构的SQL语句。例如:
-- 学生表
CREATE TABLE stu (
sno char(4) NOT NULL,
sname nvarchar(8) NOT NULL,
sex smallint DEFAULT NULL,
mno char(2) DEFAULT NULL,
birdate datetime DEFAULT NULL,
memo ntext,
PRIMARY KEY (sno)
);
-- 课程表
CREATE TABLE cou (
cno char(4) NOT NULL,
cname nvarchar(30) NOT NULL,
credit smallint DEFAULT NULL,
ptime char(5) DEFAULT NULL,
teacher nvarchar(10) DEFAULT NULL,
PRIMARY KEY ( cno )
);
-- 学生选课成绩表
CREATE TABLE sc (
sno char(4) NOT NULL, -- 学生学号
cno char(4) NOT NULL, -- 课程号
grade decimal(4,1) DEFAULT NULL,
PRIMARY KEY ( sno , cno ),
CONSTRAINT fk_sc_cno FOREIGN KEY ( cno ) REFERENCES cou ( cno ),
CONSTRAINT fk_sc_sno FOREIGN KEY ( sno ) REFERENCES stu ( sno )
)
表样例
这里给出上述表结构对应的表样例。例如
``stu```表:
sc
表:
输出样例:
请在这里给出输出样例。例如:
编译代码:
select stu.sno 学号,sname 姓名,sex 性别,2020-year(birdate) 年龄,avg(grade) 平均成绩
from sc ,stu
where sc.sno=stu.sno /*因为两个表格只有sno是相同的,所以这个可以作为连接条件。*/
group by stu.sno,sname,sex,2020-year(birdate)
having avg(grade) >=all(select avg(grade) from sc group by sno);
/*group by之后,只能用having来添加条件,不能够使用where*/
/*>=all() 是指大于等于子查询结果的所有值,即找到最大值*/
更多推荐
已为社区贡献1条内容
所有评论(0)