可能重复:
假设您有一个带有StuId、StuName、Subject、品位的表。您需要提供一个子查询,以返回一个荣誉学生名单(前10 %),按他们的平均分数排序。
例如,如果我有10个学生,平均分数是100,90,80,...10。它需要输出的第一个学生的名字,其平均是100。只有一个学生成绩是输出的。所以我不能用极限10
我正在使用MySQL5.1。
以下是我的疑问:
SELECT Stuname, TOP 10 Avg(Grade) as GPA
FROM Table
GROUP BY Stuid
ORDER BY GPA由于TOP 10,查询不正确。检查MySQL5.1引用,它不支持前10名。
根据评论,我认为不能用一个查询来解决这个问题,所以我想出了一个方法:
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){
}
} 发布于 2011-06-29 06:30:49
count = select CEIL(count(Stuname)*10/100) from table_name;
select Stuname from table_name ORDER BY GPA DESC limit count;第一个查询将返回10%的students.CEIL,用于将其转换为整数。第二个查询是检索数据。根据第一个查询计算的计数被设置为对第二个查询的限制。
发布于 2011-06-29 04:59:25
更新
听起来你想要加入一个HAVING子句,将结果限制在平均分数高于90分的人身上。
试一试
SELECT Stuid, Stuname, AVG(Grade) AS GPA FROM Table
GROUP BY Stuid, Stuname
HAVING AVG(GRADE) > 90
ORDER BY GPA DESC -- If you want highest-to-lowest. Thanks Bohemian发布于 2011-06-29 04:59:54
使用LIMIT和DESC顺序(即从最高到最低):
select Stuname, Avg(Grade) as GPA
from Table
group by Stuid
order by 1 DESC -- Add DESC
LIMIT 10 -- Add LIMIThttps://stackoverflow.com/questions/6515914
复制相似问题