2 touchfeelin touchfeelin 于 2014.12.06 22:14 提问

求sql查询,找出每门功课成绩最高的学生

一个表格有三列:名字、科目、成绩, 科目中有四门功课,怎么设计查询找出每门功课中成绩 最高的那条信息
想到用group by 可是只能查询功课中最高的成绩,不能显示姓名

8个回答

devmiao
devmiao   Ds   Rxr 2014.12.06 22:19

select * from 表 where 成绩 in (select max(成绩) in 表 group by 成绩)

touchfeelin
touchfeelin 这是个办法,不过有个小问题:比如数学最高分是95,体育第一第二分别是98和95,查询时会将体育第二名的成绩也打印出来
大约 3 年之前 回复
kufei88
kufei88   2014.12.06 23:56

select * from 表 where 成绩 in (select max(成绩) in 表 group by 科目)

qq_24286691
qq_24286691   2014.12.07 00:23

select * from (select 名字, 科目, 成绩, rank() over(partition by 科目 order by 成绩 desc) ranking from 表) where ranking = 1;

guwei4037
guwei4037   Ds   Rxr 2014.12.06 23:18

declare @名字 nchar(10),@成绩 smallint

select @名字=名字,@成绩=max(成绩) from 表 group by 名字

select * from 表
where 表.名字 = @名字 and 表.成绩 =@成绩

guwei4037
guwei4037   Ds   Rxr 2014.12.06 23:27

select a.名字,a.科目,a.成绩 from 表2 a inner join
(select 名字,max(成绩)as 成绩 from 表2 group by 名字) b
on a.名字 = b.名字 and a.成绩= b.成绩

kufei88
kufei88   2014.12.06 23:58

select * from 表 where 科目+convert(char(5),成绩) in (select 科目+convert(char(5)+max(成绩)) in 表 group by 科目)

touchfeelin
touchfeelin   2014.12.07 23:45

感谢大家献策啊,呃,这个表……我想起head in first中的一句话,设计糟糕的表应当重新设计,而不应该迁就于更复杂的查询。

sanfenzhongao
sanfenzhongao   2016.12.14 12:02

select * from
student st,(select max(st.score) max_sc, st.course from student st group by st.course) res
where res.max_sc = st.score and res.course = st.course

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!