2016-05-11 1 views
-2

Я хочу понять логику вывода определенного количества верхних значений (скажем, 2) для нескольких столбцов. Таблица выглядит примерно так: есть разные классы, предметы и ученики. я хочу знать, как смотреть на только 2 верхних студентов Марсом набрал по каждому предмету и классуsql select top n values ​​- порядок и ограничение по значению для нескольких столбцов

пример таблицы:

sample data

и так далее

Что выход должен выглядеть так: result output

+0

Это гораздо проще для других, когда вы просто введите ваши данные, а не связывая изображения. Ваша первая ссылка сломана, поэтому никто не сможет ответить на этот вопрос за вас. – Dresden

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

+0

извините, исправлено это –

ответ

0

Это легко можно сделать с помощью window functions:

select class, subject, student_id, marks_scored 
from (
    select class, subject, student_id, marks_scored, 
     dense_rank() over (partition by subject, class order by marks_scored desc) as rnk 
    from the_table 
) t 
where rnk <= 2 
order by class, subject, marks_scored desc; 

Если есть больше чем один студент с таким же счетом, все эти студенты будут перечислены. Таким образом, это может вернуть более двух «лучших студентов».

Если вы не хотите, чтобы заменить dense_rank() с row_number()

+0

Спасибо большое! Раньше я никогда не пользовался функциями окна. Постараюсь больше узнать об этом. –