使用mysql查找班级中排名前10%的学生

时间:2013-06-30 18:25:40

标签: mysql sql

我需要找到一个班级前10%的学生(注意不是排名前10位的前10%)。

我的尝试 -

select *
From alphatable
LIMIT 0, (SELECT Floor(26*0.01))

但这是错误,让我知道我做错了什么?

小提琴 - Fiddle

修改 注意 - 这是一个虚拟数据..我的实际班级数据包含96名学生..那么让我知道发现的公式是否正确? (count_student_number*.01)

2 个答案:

答案 0 :(得分:2)

尝试使用以下查询和公式查找前10%的学生:

SELECT Floor(100 * 0.1) INTO @my_limit;
PREPARE STMT FROM 'SELECT * FROM alphatable LIMIT ?';
EXECUTE STMT USING @my_limit;

注意:请在查询中添加其他必需的过滤器,并重新检查您的公式。

答案 1 :(得分:1)

考虑到Samsonjet的答案,试试这样:

SELECT FLOOR(
   (SELECT 10*(SELECT COUNT(*) 
               FROM alphatable)/100))
INTO @top_10_percent;
PREPARE STMT FROM 'SELECT * 
                   FROM alphatable 
                   ORDER BY occurnence LIMIT ?';
EXECUTE STMT USING @top_10_percent;

它将按给定的表计算您的前10%,并将结果计算在底。

在这里检查你的小提琴:http://www.sqlfiddle.com/#!2/f9fb0b/74