【发布时间】:2021-06-10 18:18:32
【问题描述】:
我有一张表,有 2 列,分别命名为“姓名”和“分数”,展示了一个班级的学业成绩。
“姓名”:安迪、艾米、克洛伊、约翰等
“分数”:从 0 到 100
有些学生已经提交了所有的测试,但有些学生由于疫情尚未完成,换句话说,有些学生只得到了一个结果。 现在我需要弄清楚他们每个人的第二高分是多少。
如果学生只提交了一次,意味着他们没有第二高的分数,所以我们将返回 null 作为分数。
我试过了
SELECT
name,
CASE
WHEN COUNT(score) IS NULL THEN NULL
ELSE MAX(score)
END AS second_highest
FROM
result
WHERE
score NOT IN (SELECT
MAX(score)
FROM
result
GROUP BY name)
GROUP BY name
ORDER BY name;
但似乎子查询排除了一次提交学生的唯一分数,因此他们不会显示在查询结果中。 这种方法有什么我需要改变的还是有更好的方法?
Input and output can be found here 抱歉,我不熟悉在 Stackoverflow 上演示示例 我使用 MySQL 版本 8.0.22
【问题讨论】:
-
提供样本数据作为 CREATE TABLE + INSERT INTO 和所需的输出。指定精确 MySQL 版本。