You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询找出平均成绩最高学生的rollno?

找出平均成绩最高学生的rollno的正确SQL语句

现有数据表

student表

rollnoname
1A
2B
3C
4B
5D
6C

marks表

rollnomarengmathsphychem
14045385050
22850454138
34142434445
44544434241
53332421541

平均分查询及结果

执行以下SQL可计算每个学生的平均分:

select rollno,(mar+eng+maths+phy+chem)/5 as average from marks;

得到结果:

rollnoaverage
144.6000
240.4000
343.0000
443.0000
532.6000

错误语句分析

你尝试的语句存在语法错误,因为MAX()聚合函数不能直接嵌套返回多行结果的子查询:

select rollno,max(
                    select (mar+eng+maths+phy+chem)/5 from marks
                    ) 
from marks;

正确SQL语句

方法一:子查询匹配最高平均分

这种写法兼容所有主流数据库,能找出所有平均分等于最高分的学生rollno:

SELECT rollno
FROM marks
WHERE (mar + eng + maths + phy + chem)/5 = (
    SELECT MAX((mar + eng + maths + phy + chem)/5)
    FROM marks
);

方法二:使用窗口函数(适用于MySQL 8+、PostgreSQL等)

通过窗口函数给平均分排名,筛选排名第一的学生,同样支持并列最高分的场景:

SELECT rollno
FROM (
    SELECT rollno,
           (mar + eng + maths + phy + chem)/5 AS average,
           RANK() OVER(ORDER BY (mar + eng + maths + phy + chem)/5 DESC) AS rnk
    FROM marks
) t
WHERE rnk = 1;

内容的提问来源于stack exchange,提问作者samarjeet desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:52:25