【发布时间】:2011-07-29 05:19:40
【问题描述】:
假设您有一张表,其中包含 StuId、StuName、Subject、Grade。您需要提供子查询以返回按平均成绩排序的荣誉学生(前 10%)列表。
例如,如果我有 10 个学生,他们的平均成绩是 100,90,80,...10。 要求输出第一个平均为100的学生姓名,只输出一个学生成绩。所以我不能使用limit 10
我正在使用 mysql 5.1。
这是我的查询:
SELECT Stuname, TOP 10 Avg(Grade) as GPA
FROM Table
GROUP BY Stuid
ORDER BY GPA
由于TOP 10,查询不正确。查看MYSQL 5.1参考,不支持top 10。
根据cmets的说法,我觉得用一个查询是解决不了的,所以想出一个方法:
F(conn){
Statement stmt;
int top10percnet = 0;
try{
stmt = conn.createStatement;
String query = "select CEIL(count(stuname)*10/100) as 10percent from grades";
ResultSet rs = stmt.execute(query);
while(rs.next()){
top10percent = rs.getString("10percent");
}
query = "select stuname, avg(grade) as average from grades group by stuname order
by average desc limit " + Integer.toString(top10percnet);
rs=stmt.execute(query);
while(rs.next()){
...// output result
}
}
catch(SQLException e){
}
}
【问题讨论】:
-
我很好奇,你能链接到引用
TOP子句的 MySQL 文档吗? -
我之前的问题要求不清楚,所以编辑一下。我期待的不是前 10 名学生,而是前 10% 的学生。可能是一个人,零个人。
-
我已经相应地更新了我的答案