每位学生的最高成绩
⑴ SQL查询每课成绩最高的学生的信息
select
distinct
*
from
(
select
需要抽取的字段
from
学生成绩内表容
a
where
a.语文
=
(select
max(语文)
from
学生成绩表)
union
all
select
需要抽取的字段
from
学生成绩表
a
where
a.数学
=
(select
max(数学)
from
学生成绩表)
union
all
select
需要抽取的字段
from
学生成绩表
a
where
a.英语
=
(select
max(英语)
from
学生成绩表)
。。。)
b
如果需要包含学科成绩,那还要做处理。
⑵ SQL查询每课成绩最高的学生的信息
大概思路是找出单科最高成绩,再跟成绩表关联找出学生。
假设成绩表有字段科目ID、学生ID、学生成绩三个字段
大概以下SQL,可以参考下:
select 科目ID、学生ID、学生成绩 b.最高成绩 from 成绩表 a
left join
(select 科目ID,max(学生成绩) as 最高成绩 from 成绩表 group by 科目ID) b
on (a.科目ID=b.科目ID and a.学生成绩=b.最高成绩)
where b.最高成绩 is not null;
⑶ C语言学生成绩最高平均
下面的程序先输入10个学生的数据,输入三门课的成绩完成后,计算每位学生的总分以及平均分。然后找出最高分学生。最后输出最高分学生的数据,还有三门课的总平均成绩。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineN10
structstu
{
intgrade[3];
charname[10];
charnumber[10];
intsum;
doubleave;
};
voidf_input(structstu*temp);
structstuf_max(structstu*temp);
voidf_print(structstus);
voidf_print_ave(structstu*temp);
intmain()
{
structstus[N];
structstus_max;
f_input(s);
s_max=f_max(s);
printf(" thesummaxis: ");
f_print(s_max);
f_print_ave(s);
return0;
}
voidf_input(structstu*temp)
{
inti;
intj;
for(i=0;i<N;i++)
{
intsum=0;
printf("pleaseinput%dstudentname: ",i+1);
scanf("%s",temp->name);
printf("pleaseinput%dstudentnumber: ",i+1);
scanf("%s",temp->number);
for(j=0;j<3;j++)
{
printf("pleaseinput%dgrade: ",j+1);
scanf("%d",&temp->grade[j]);
sum+=temp->grade[j];
}
temp->sum=sum;
temp->ave=sum/3.0;
temp++;
}
}
structstuf_max(structstu*temp)
{
structstu*max;
inti;
max=temp;
for(i=0;i<N;i++)
{
if((temp->sum)>(max->sum))
{
max=temp;
}
temp++;
}
return*max;
}
voidf_print(structstus)
{
inti;
printf("thestudentnameis:%s ",s.name);
printf("thestudentnumberis:%s ",s.number);
for(i=0;i<3;i++)
{
printf("thegrade[%d]is:%d ",i+1,s.grade[i]);
}
printf("thesumis:%d ",s.sum);
printf("theaverageis:%f ",s.ave);
}
voidf_print_ave(structstu*temp)
{
inti;
intsum_all=0;
doubleave_all;
for(i=0;i<N;i++)
{
sum_all+=temp->sum;
temp++;
}
ave_all=sum_all/(3.0*N);
printf(" theaverageofallgradesis:%f ",ave_all);
}
我跑过程序了,应该没错的,就是输入学生信息的时候,由于有10位学生,可能输入的信息比较多。先输入姓名,然后是学号,最后是三门课程的成绩。每次输入完成后回车就可以了。可以自己跑一下程序,就看到结果了。
⑷ SQL查询求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分
你好,你展示的第一种sql查询方案,其意思是:
先根据score表中的sno分组求每个sno的最高分数。这求得的当然是每个同学的最高分啦,但是只是获得了最高分,没有指定是谁的最高分,导致在前面的【SELECT SNAME ,CNO,GRADE FROM Score Y,StudentWHERE (STUDENT.SNO=Y.SNO)】查询结果集中的后面检索条件【AND Y.GRANDE IN (所有人的最高分集合)】,这样系统就会查询分数在“所有人的最高分”里的结果集了。
而第二种方案,除了限定分数范围(最高分),还限定了学生的编号(
SELECTMAX(GRADE)FROMSCOREWHERE
SNO=Y.SNO
GROUPBYSNO,sno=y.sno就是限定学生的编号。
),所以结果自然不同了。
根据你的要求,我给你提供一种查询方式。其实原理是一样的哦。
selectstu.sname,scr.cno,scr.gradefromstudentstu
leftjoinscorescronscr.sno=stu.sno
whereexists(select1from(selects.sno,max(s.grade)asmgfromscoresgroupbys.sno)twheret.sno=stu.sno
andt.mg=scr.grade)
希望能帮助你。
⑸ 在表格成绩单中,(1)用max()函数求各学科的最高分;(2)求各学生的成绩平均分
一、用MAX求各学科最高分的步骤如下:
1、在“英语”学科下方的单元格中输入“=”;
⑹ 求一个oracle的sql语句,在成绩记录表中取每个同学的最高一次成绩
用下面的制SQL语句可实现该功能:
select name as 姓名,sum(case when subject='语文' then fenshu else 0 end) as 语文,sum(case when subject='数字' then fenshu else 0 end) as 数字,sum(case when subject='英语' then fenshu else 0 end) as 英语 from score group by name
⑺ mysql中有student,course,scorse 三张表, 计算每个人单科的最高成绩(学生,课程,成绩)
获取每一来个科目最高分的学生源
select sid,cid,max(score) from score group by cid;
然后分别和学生表、课程表联合查询取出科目名字和学生名字就ok了
写成单条sql:
select * from (select s.sid,s.realname,a.cid,a.mscore from student as s right join (select sid,cid,max(score) as mscore from score group by cid)as a on a.sid = s.sid) as a1 left join ((select c.coursename,c.cid from course as c right join (select sid,cid as mscore from score group by cid)as a on a.cid = c.cid) ) as b1 on a1.cid = b1.cid;
⑻ 用sql 查询出各个科目中成绩最好的学生的名字
select
姓名
from
(select
*
from
(
select
a.学生编号,a.姓名
b.
学生编号,b.科目,b.分数
from
table1
a
right
join
table2
b
on
b.学生编号=a.学生编号
)c
group
by
c.科目
having
max(c.分数)
)
⑼ 每个学生有不同成绩,sql查询最高成绩的排名
1.每个学生可以是参加了一次或者多次的考试,对吧?
2.你是使用什么数据库?版MySQL?Oracle?SQLServer?
3.若学生中权最高的成绩都是相同的分数,如何排名?是给相同的名次还是依旧随机增序的方式排序?
⑽ SQL语句执行问题:有一张表sc如下:查询每位学生的最高成绩。
对于每个学号,不存在比这个学号的分数低的数据全部查出来。
反之就是得到每个学号最高的分数了。
另外,你也可以
select sno,max(grade) from sc group by sno