首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据库中选择前10名学生

从数据库中选择前10名学生
EN

Stack Overflow用户
提问于 2011-06-29 04:55:48
回答 5查看 12.9K关注 0票数 1

可能重复:

sql to select top 10 records

假设您有一个带有StuId、StuName、Subject、品位的表。您需要提供一个子查询,以返回一个荣誉学生名单(前10 %),按他们的平均分数排序。

例如,如果我有10个学生,平均分数是100,90,80,...10。它需要输出的第一个学生的名字,其平均是100。只有一个学生成绩是输出的。所以我不能用极限10

我正在使用MySQL5.1。

以下是我的疑问:

代码语言:javascript
复制
SELECT Stuname, TOP 10 Avg(Grade) as GPA 
  FROM Table 
GROUP BY Stuid 
ORDER BY GPA

由于TOP 10,查询不正确。检查MySQL5.1引用,它不支持前10名。

根据评论,我认为不能用一个查询来解决这个问题,所以我想出了一个方法:

代码语言:javascript
复制
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){
}



}  
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-29 06:30:49

代码语言:javascript
复制
count = select CEIL(count(Stuname)*10/100) from table_name;
select Stuname from table_name ORDER BY GPA DESC limit count;

第一个查询将返回10%的students.CEIL,用于将其转换为整数。第二个查询是检索数据。根据第一个查询计算的计数被设置为对第二个查询的限制。

票数 3
EN

Stack Overflow用户

发布于 2011-06-29 04:59:25

更新

听起来你想要加入一个HAVING子句,将结果限制在平均分数高于90分的人身上。

试一试

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2011-06-29 04:59:54

使用LIMITDESC顺序(即从最高到最低):

代码语言:javascript
复制
select Stuname, Avg(Grade) as GPA
from Table
group by Stuid
order by 1 DESC -- Add DESC
LIMIT 10 -- Add LIMIT
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6515914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档