题目:
10-3 查询平均成绩最高的前3名同学
分数 10
作者 张庆
单位 集美大学
本题目要求编写SQL语句,
查询平均成绩最高的前3名同学的学号,姓名,性别及年龄。假设当前为2020年,年龄仅按年计算.
提示:可使用"limit n"语句实现 "top n" 。
表结构:
请在这里写定义表结构的SQL语句。例如:
CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);
表样例:
请在这里给出上述表结构对应的表样例。例如
``stu```表:
sc表:
输出样例:
请在这里给出输出样例。例如:
代码:
select
t.sno as 学号,
t.sname as 姓名,
t.sex as 性别,
(2020-year(t.birdate)) as 年龄, -- 计算年龄(一般使用YEAR(NOW())-YEAR(t.birdate))
avg(sc.grade) as 平均成绩 -- 计算平均成绩
from stu as t
join sc on t.sno=sc.sno
group by t.sno
order by avg(sc.grade) desc
limit 0,3;
-- LIMIT offset, count: offset 表示从结果集中的哪一行开始,count 表示要返回的行数。
考点:
1. sql计算年龄最常使用:YEAR(NOW()) - YEAR(t.birdate) AS 年龄,
2. LIMIT offset, count:其中,offset 表示从结果集中的哪一行开始,count 表示要返回的行数。"LIMIT 0, 3" 表示从结果集中的第一行开始,返回 3 行数据。换句话说,它告诉数据库只返回符合条件的结果集中的前三行数据。