SELECT
s1.class_id,
s1.student_id,
s1.student_name,
s1.score
FROM students s1
WHERE (
-- 计算比当前学生成绩高的同班学生数
SELECT COUNT(*)
FROM students s2
WHERE s2.class_id = s1.class_id
AND s2.score > s1.score
) < (
-- 计算班级总人数的20%(向上取整)
SELECT CEIL(COUNT(*) * 0.2)
FROM students s3
WHERE s3.class_id = s1.class_id
)
ORDER BY s1.class_id, s1.score DESC;
看看这个思路