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

查询最大计数:获取拥有最多成绩的人员姓名

我懂你碰到的这个坑了——直接写MAX(COUNT(*))确实跑不通,因为SQL里聚合函数(比如COUNT())没法直接嵌套在另一个聚合函数(比如MAX())的SELECT子句里,数据库没法直接解析这种嵌套的聚合逻辑。下面我给你几种实用的解决办法,先假设你的表结构大概是这样(比如学生表存姓名,成绩表存每条成绩记录,通过学生ID关联):

-- 示例参考表结构
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

CREATE TABLE scores (
    score_id INT PRIMARY KEY,
    student_id INT NOT NULL,
    score INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id)
);

方法1:用窗口函数(推荐,适合MySQL 8+、PostgreSQL、SQL Server等现代数据库)

窗口函数可以先算出每个学生的成绩条数,再给这些条数排名,最后取排名第一的学生:

SELECT name, score_count
FROM (
    SELECT 
        s.name,
        COUNT(sc.score_id) AS score_count,
        -- RANK()会保留并列排名,比如两个学生都是最多记录,都会被查出
        RANK() OVER (ORDER BY COUNT(sc.score_id) DESC) AS ranking
    FROM students s
    JOIN scores sc ON s.student_id = sc.student_id
    GROUP BY s.student_id, s.name
) AS ranked_students
WHERE ranking = 1;

如果你的业务场景只需要返回任意一个最多记录的学生(不管有没有并列),把RANK()换成ROW_NUMBER()就行。

方法2:子查询先拿最大记录数,再匹配学生

先算出所有学生里最多的成绩记录条数,再找到刚好拥有这个条数的学生,这个方法兼容老版本数据库(比如MySQL 5.x):

SELECT s.name, COUNT(sc.score_id) AS score_count
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
GROUP BY s.student_id, s.name
HAVING COUNT(sc.score_id) = (
    SELECT MAX(score_count)
    FROM (
        SELECT COUNT(*) AS score_count
        FROM scores
        GROUP BY student_id
    ) AS student_score_counts
);

方法3:排序后取第一条(适合只需要单个结果的场景)

如果不需要考虑并列情况,只想快速拿到一个拥有最多成绩记录的学生,可以直接排序后取第一条:

SELECT s.name, COUNT(sc.score_id) AS score_count
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
GROUP BY s.student_id, s.name
ORDER BY score_count DESC
LIMIT 1;

注意:如果有多个学生成绩记录数并列最多,这个方法只会返回其中一个,具体返回哪个取决于数据库的默认排序规则。

为啥你原来的写法不行?

MAX(COUNT(*))失效的核心原因是:COUNT(*)是GROUP BY之后才计算出来的聚合值,而MAX()需要对这些聚合后的结果再做统计,但SQL语法不允许在同一个SELECT子句里直接嵌套两层聚合函数,必须通过子查询或者窗口函数把“计算每个学生的记录数”和“找最大记录数”这两步拆分开来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:43:13