Предположим, что у нас есть таблица, которая имеет два столбца, один столбец содержит имена некоторых людей, а другой столбец содержит некоторые значения, относящиеся к каждому человеку. Один человек может иметь более одного значения. Каждое значение имеет числовой тип. Вопрос в том, что мы хотим выбрать верхние 3 значения для каждого человека из таблицы. Если один человек имеет менее 3 значений, мы выбираем все значения для этого человека.
Проблема может быть решена, если в таблице нет дубликатов в запросе, представленном в этой статье Выбрать верхние 3 значения из каждой группы в таблице с помощью SQL. Но если есть дубликаты, каково это решение?
Например, если для одного имени Джон у него есть 5 значений, связанных с ним. Они составляют 20,7,7,7,4. Мне нужно вернуть пары имя/значение, как указано ниже, по порядку по убыванию для каждого имени:
-----------+-------+
| name | value |
-----------+-------+
| John | 20 |
| John | 7 |
| John | 7 |
-----------+-------+
Для Джона нужно вернуть только три строки, хотя для Джона есть три 7.