0

目标

我有一张学生桌。我需要显示详细信息,即。name在考试中获得最高分的学生。

表的定义

以下是表定义的代码:(我使用来自http://www.sqlfiddle.comtext to ddl的选项创建了它)

CREATE TABLE STUDENT
    ("NAME" varchar2(1), "MARKS" int)
;

我插入的一些记录:

INSERT ALL 
    INTO STUDENT ("NAME", "MARKS")
         VALUES ('A', 17)
    INTO STUDENT ("NAME", "MARKS")
         VALUES ('B', 18)
    INTO STUDENT ("NAME", "MARKS")
         VALUES ('C', 19)
    INTO STUDENT ("NAME", "MARKS")
         VALUES ('D', 90)
    INTO STUDENT ("NAME", "MARKS")
         VALUES ('E', 50)
    INTO STUDENT ("NAME", "MARKS")
         VALUES ('F', 23)
SELECT * FROM dual
;

帮助我完成将实现此目的的查询。

http://www.sqlfiddle.com上的规范oracle 11g R2

在 Windows 机器上。

4

2 回答 2

3
于 2013-03-29T15:31:38.347 回答
1

最简单的方法是对数据进行排序并获取第一行:

select *
from (select s.*
      from student s
      order by mark desc
     ) s
where rownum = 1;

另一种方法是使用分析函数:

select *
from (select s.*, row_number() over (order by mark desc) as seqnum
      from student s
      order by mark desc
     ) s
where seqnum = 1;

如果替换row_number()rank(),您将获得所有得分最高的学生。

于 2013-03-29T17:14:22.877 回答