日期:2014-05-17  浏览次数:21028 次

你能一条SQL得出这个结果吗
表结构如下
      学生ID(s_id)
      科目(s_kc)
      成绩(s_grade)
用一条SQL语句查出每科目成绩前两名的学生

------解决方案--------------------
select * from
(select row_number() over( partition by t.s_kc order by t.s_grade desc) no, t.* from table t )
where no <=2



------解决方案--------------------
SELECT *FROM (
select 科目,成绩,学号,
dense_rank() over (partition by 科目 order BY 成绩 asc nulls last) 排名
FROM TABLE) WHERE 排名 <=2;

该语句包括了成绩一样,也就是并列名次的

------解决方案--------------------
刚才写错了,得排倒序
SELECT *FROM (
select 科目,成绩,学号,
dense_rank() over (partition by 科目 order BY 成绩 desc nulls last) 排名
FROM TABLE) WHERE 排名 <=2;

该语句包括了成绩一样,也就是并列名次的

------解决方案--------------------
来个不一样的吧

select *
from 成绩表 a
where 学生ID in
(
select 学生ID
from
(
select * from 成绩表 order by 成绩 desc
)
where a.科目=科目
and rownum <=2
)