2013-03-29 3 views
0

цельпоказывая детали студента с максимальными отметками в Oracle 11g R2

У меня есть таблица студентов. Мне нужно показать подробности, а именно. name студент, получивший максимальные оценки в тесте.

определения таблиц

Ниже приведен код для определения таблиц (я создал это, используя text to ddl вариант из http://www.sqlfiddle.com)

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 
; 

пожалуйста помогите мне с запросом, который достигнет этого.

спецификации оракул 11g R2 на http://www.sqlfiddle.com

на машине Windows.

+0

Что вам нужно в случае галстука? – Alkini

ответ

3

Быстрый (и неэффективный) способ - выбрать максимальное значение и использовать его в предложении WHERE.

select * 
from student 
where marks = (
    select max(marks) 
    from student 
); 

В случае галстука вы получите несколько строк.

Если вы беспокоитесь о производительности, делайте только один проход на столе, используя аналитические функции. Например: Analytic functions for “the attribute from the row with the max date”

+0

Спасибо! это был правильный запрос! – IcyFlame

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(), вы получите всех учеников, имеющих самую высокую оценку.