У меня возникла очень распространенная проблема, касающаяся «Выбор верхних N строк для каждой группы в таблице».Выбор вершин N строк для каждой группы в таблице
Рассмотрите таблицу с колонками id, name, hair_colour, score
.
Я хочу набор результатов, чтобы при каждом цвете волос получить мне 3 наименования бомбардиров.
Чтобы решить эту проблему я получил именно то, что мне нужно на Rick Osborne's blogpost "sql-getting-top-n-rows-for-a-grouped-query"
Это решение не работает, как ожидалось, когда мои оценки равны.
В приведенном выше примере результат выполняется следующим образом.
id name hair score ranknum
---------------------------------
12 Kit Blonde 10 1
9 Becca Blonde 9 2
8 Katie Blonde 8 3
3 Sarah Brunette 10 1
4 Deborah Brunette 9 2 - ------- - - > if
1 Kim Brunette 8 3
Рассмотрите ряд 4 Deborah Brunette 9 2
. Если у этого также есть тот же счет (10), что и у Сары, тогда ranknum будет 2,2,3 для типа волос «Брюнетка».
Каково решение этого вопроса?
Какие СУБД вы используете? –
Существует решение для этого по адресу http://stackoverflow.com/questions/3823939/, если вы не используете новые SQL-серверы. –