数据库查询总成绩最高的三名学生的学号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库查询总成绩最高的三名学生的学号相关的知识,希望对你有一定的参考价值。

学生表:student 学号:number
成绩表:score 成绩:scores
select student.number from student,score where student.id=score.id group by sum(scores) order by student.number DESC limit3;
参考技术A select top 3 ,student.number from student inner join score on student.id=score.id order by scores desc

Hive 基础测试

准备数据

  • 学生表student
         学号sid,姓名sname,性别ssex,年龄sage,系 department
         95001,李勇,男,20,CS
         95002,刘晨,女,19,IS
         95003,王敏,女,22,MA
         95004,张立,男,19,IS
         95005,刘刚,男,18,MA
         95006,赵丽,女,20,CS
  • 成绩表score
         学生编号sid,课程编号cid,成绩sscore 
         95001,1,81
         95001,2,85
         95001,3,88
         95001,4,70
         95002,1,90
         95002,2,80
         95002,3,90
         95002,4,80
         95003,1,70
         95003,2,78
         95003,3,65
         95003,4,65
         95004,1,70
         95004,2,90
         95004,3,85
         95004,4,90
         95005,1,70
         95005,2,90
         95005,3,70
         95005,4,90
         95006,1,70
         95006,2,90
         95006,3,70
         95006,4,90
  • 课程表course
         课程编号cid,课程名cname
         1,数据库
         2,数学
         3,信息系统
         4,操作系统

需求1:创建三个外部表,并分别给外部表加载数据.

create external  table student(
 sid string,
 sname string,
 ssex string,
 sage int)
row format delimited fields terminated by ',';
load data local inpath '/root/test/student.txt' into table student;


create external  table score(
sid string,
cid string,
 sscore int)
row format delimited fields terminated by ',';
load data local inpath '/root/test/score.txt' into table score;


create  external table course(
cid string,
cname string)
row format delimited fields terminated by ',';
load data local inpath '/root/test/course.txt' into table course;

需求2:查询各课的学生人数。

select  b.cname, a.num
from 
(select cid ,count(*)  num from score group by cid) a, course b
where a.cid=b.cid;

需求3: 查询每个学生的总成绩,并对总成绩进行降序排序,要求显示字段:学生名字,学生学号,学生总成绩

select  st.sname ,st.sid  ,sum(sc.sscore)
from student st
    join score  sc
        on st.sid=sc.sid
group by st.sname, st.sid;

需求4:求总课程平均分最高的前三名学生

select sname,b.dr,b.avgScore
from(select a.sid,avgScore,dense_rank() over(order by avgScore desc) dr
from (select sid,avg(sscore) avgScore
from score group by sid) a) b,student 
where b.sid = student.sid and dr<4;

以上是关于数据库查询总成绩最高的三名学生的学号的主要内容,如果未能解决你的问题,请参考以下文章

sql,查询每门课程最高分的学生的学号,课程号,成绩。再一张表里

Hive 基础测试

SQL语句查询每个学生的学号、姓名、平均成绩、最高成绩和最低成绩

SQL查询每门课程最高分学生的学号,课程号,成绩

sql查出每个科目成绩前三名

用sql语句,查询每个班级成绩排名前三名的学生姓名