欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

怎么求第二大的记录

更新时间: 2014-01-05 02:13:13 责任编辑: Author_N1

 

如何求第二大的记录
表如下:


求java成绩第二高的姓名?
要求:只用用一个SQL语句。


谢谢!
--参考方法--
用分析函数
没有测试,不知道有没有错误:

select name from (select t.*,row_number() over(order by kemu desc) rn from t where kemu='JAVA') where rn=2
--参考方法--

with t as
 (select 1 as ID, 'Java' as course, 'Jim' as name, '80' as score
    from dual
  union all
  select 2 as ID, 'Java' as course, 'Lilei' as name, '90' as score
    from dual
  union all
  select 3 as ID, 'Java' as course, 'Hanmeimei' as name, '60' as score
    from dual
  union all
  select 4 as ID, 'C' as course, 'Tom' as name, '100' as score from dual
  
  )
select name
  from (select name,
               row_number() over(partition by course order by score desc) as rn
          from t
         where course = 'Java')
 where rn = 2;

--参考方法--
这样的问题要说明,第二名成绩相同怎么处理
--参考方法--
楼上说的有理:
如果第二高的分数有多个人,你只要一个就用row_number

如果全部要,就用dense_rank
--参考方法--
在介绍一种比较少见的写法,使用connect by 


with t as
 (select 1 as ID, 'Java' as course, 'Jim' as name, '80' as score
    from dual
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:13:13
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7137/
本文WWW.DOC100.NET DOC100.NET版权所有。