您的位置:首页 > 数据库 > SQL

sql分组后获取top

2016-03-17 00:00 627 查看
数据库表字段name,course,score分别为姓名,学科,分数;需求:查询出每个学科的前5名

//建表start

create table t_student(
name String,
course String,
score int
)
row format delimited
fields terminated by '\t'
stored as textfile;

//建表end

//产生测试数据start

public void test1() throws Exception{
String[] names=new String[100];
String[] course=new String[]{"数学","语文","英语","政治","地理","高数","计算机","会计"};

File file=new File("E:/score.txt");
FileWriter fw=new FileWriter(file);
Random rand = new Random();
for(int i=0;i<names.length;i++){
names[i]="name"+i;
}
for(int i=0;i<names.length;i++){
for(int j=0;j<course.length;j++){
String s=names[i]+"\t"+course[j]+"\t"+rand.nextInt(101)+"\n";
//System.out.printf(s);
fw.write(s);
}
}
fw.close();
}

//产生测试数据end

select * from (select *,row_number() over(partition by course order by score desc) as rownum from t_student) t where rownum<=5;

其中select *,row_number() over(partition by course order by score desc) as rownum from t_student按学科进行了分组,按成绩进行了降序,获取了每一组的行号



外层的查询对每一组的行号取top,得到最终结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql分组 top sql分组top