10-30 查询平均成绩最高的同学(MSSQL)

本题目要求编写SQL语句,查询平均成绩最高的同学的学号,姓名,性别,年龄及平均成绩。

注意:假设以当前系统时间为2020年来计算学生年龄。

提示:MSSQLServer 评测SQL语句。

select stu.sno as 学号,stu.sname as 姓名,stu.sex as 性别,
2020-year(stu.birdate) as 年龄,a.pj as 平均成绩
from stu
join(select stu.sno,avg(sc.grade) as pj
    from stu 
    join sc on sc.sno=stu.sno
    group by stu.sno) as a 
    on stu.sno=a.sno
where a.pj=(select max(pj)
from(
  select avg(sc.grade) as pj
  from stu
  join sc on sc.sno=stu.sno
  group by stu.sno
) a );
/*正常求用top 1是可以求出来的,这道题事多要求用子查询和max()函数*/

/*表别名:使用 AS 关键字为表和列设置别名,如 stu 是 stu 表的别名,学号 是 stu.sno 的别名,让代码更易读。
多表连接:通过 JOIN 语句结合 ON 条件将 stu 表和 sc 表连接,以获取关联数据。
子查询:
第一个子查询按学生编号分组计算每个学生的平均成绩。
第二个子查询嵌套在 WHERE 子句中,用于找出所有学生平均成绩中的最大值。
聚合函数:使用 AVG() 计算平均成绩,MAX() 找出平均成绩的最大值。
分组查询:使用 GROUP BY 按学生编号对数据分组,以便计算每个学生的平均成绩。
筛选条件:WHERE 子句结合子查询结果,筛选出平均成绩等于最大值的学生记录。*/
/*llll*/

你可能感兴趣的:(sqlserver,数据库,sql,mssql)