2013-02-11 2 views
0

Я новичок в sql и работаю над назначением. Возникает вопрос, где я должен использовать функцию рангов, но я понятия не имею, как это использовать. Я пытался найти некоторую информацию в Интернете, но все еще имею проблемы. Я размещаю вопрос здесь, если у вас есть какие-либо статьи или комментарии, которые были бы полезны, отправьте сюда.Функция ранга oracle sql

Спасибо,

ответ

0

Я не undersatand, что так трудно понять, о ранге() по убывающей дата публикации, но здесь это так или иначе:

select aid 
     , email 
     , trunc((rnk-1)/5) + 1 as pageno 
from (select aid 
       , email 
       , rank() over (order by post_date desc) as rnk 
     from ads) 

Возможно, вам потребуется настроить расчет номера страницы; этот вопрос несколько неоднозначен («номер страницы, где объявление будет указано для всех объявлений, которые будут указаны на странице, отличной от первой страницы»).


В комментарии @AndriyM, в реальной жизни мы используем ROW_NUMBER() для этого, а не RANK(), так как эта функция будет производить отчетливый номер для каждой строки без пробелов, которые ни RANK(), ни DENSE_RANK может гарантия. Это будет выглядеть

row_number() over (order by post_date desc, aid asc) as rn 

Пожалуйста, имейте в виду, что ваш учитель, вероятно, достаточно умен, чтобы знать о StackOverflow, так что будьте честны о присвоении кредита, где это связано.

+1

Я думаю, что это ROW_NUMBER вместо RANK. С RANK вы можете получить что-то вроде «1,2,3,3,5,5,5,8, ...», а результирующие номера страниц будут «1,1,1,1,1,1,1, 2, ... ', т.е. более 5 элементов на одной странице. Конечно, с ROW_NUMBER было бы лучше обеспечить тай-брейк, и я думаю, что «помощь» должна быть хорошей, как одна. (Даже если это не идеальный вариант, он, по крайней мере, сделает результаты предсказуемыми). –

0

Синтаксис функции ранга:

rank(expression1, ... expression_n) WITHIN GROUP (ORDER BY expression1, ... expression_n) 

и это является примером:

select rank(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; 
+0

Я читал это раньше, но это не помогает. Я думаю, –

Смежные вопросы