выберите 5 лучших с рангом - все результаты ранга 1

Когда я выполняю приведенный ниже запрос, все 5 возвращенных записей имеют ранг "1"... но мне нужно, чтобы запись с наибольшим количеством была "1", затем "2" и т. д.....

Я пробовал варианты приведенного ниже запроса, используя разные столбцы в OVER() и т. д.... не повезло.

SELECT TOP(5)
    SearchTerm,
    Category,
    count(''),
    RANK() OVER(PARTITION BY SearchTerm ORDER BY count('') DESC)

FROM 
    Searches

GROUP BY SearchTerm, Category
ORDER BY count('') desc

person adam    schedule 26.03.2015    source источник
comment
Попробуйте RANK() OVER(ORDER BY count(*) DESC) .   -  person Mahesh    schedule 26.03.2015
comment
Дин-дин-дин! благодарю вас!!! Я думал, что требуется PARTITION BY..... оказывается, OVER() просто нужен ORDER BY.   -  person adam    schedule 26.03.2015
comment
Рад, что это сработало. Удачного кодирования!   -  person Mahesh    schedule 26.03.2015


Ответы (2)


Попробуйте это (ряд SOMERANK можно удалить)

select ROW_NUMBER() OVER ( ORDER BY SearchTerm) AS MYRANK, *
FROM
(
    SELECT TOP(5)
        SearchTerm,
        Category,
        count('') AS MYCOUNT,
        RANK() OVER(PARTITION BY SearchTerm ORDER BY count('') DESC) AS SOMERANK

    FROM 
        Searches

    GROUP BY SearchTerm, Category
    ORDER BY count('') desc
) T
person Santa Paws    schedule 26.03.2015

Самое простое решение было благодаря @Coder of Code (комментарий к исходному сообщению)

Просто удалите ненужный раздел «Разделить по».

SELECT TOP(5)
    SearchTerm,
    Category,
    count(''),
    RANK() OVER(ORDER BY count('') DESC)

FROM 
    Searches

GROUP BY SearchTerm, Category
ORDER BY count('') desc
person adam    schedule 26.03.2015