Для решения этой задачи в MySQL можно воспользоваться комбинацией подзапросов и функции ROW_NUMBER().
Вот как это можно сделать:
1. Начнем с создания подзапроса, который будет вычислять номер строки для каждого значения в каждой категории. Для этого используем функцию ROW_NUMBER(). Помимо этого, мы также используем функцию ORDER BY DESC, чтобы значения в каждой категории были организованы в порядке убывания.
SELECT category, value, ROW_NUMBER() OVER (PARTITION BY category ORDER BY value DESC) AS row_number FROM table_name
Этот запрос вернет нам результат, содержащий три столбца: категорию, значение и номер строки.
2. Затем мы можем использовать этот подзапрос внутри еще одного подзапроса, чтобы выбрать только строки с номером меньше или равным 5. Мы также упорядочим результаты по категориям и номерам строк, чтобы получить нужный нам порядок.
SELECT category, value FROM (SELECT category, value, ROW_NUMBER() OVER (PARTITION BY category ORDER BY value DESC) AS row_number FROM table_name) AS subquery WHERE row_number <= 5 ORDER BY category, row_number
Этот запрос вернет нам результат, содержащий два столбца: категорию и значение для строк с номерами от 1 до 5 в каждой категории.
Важно отметить, что вместо "table_name" в обоих запросах нужно указать имя вашей таблицы, из которой вы хотите выбрать значения.
Таким образом, этот запрос позволит вам вывести по 5 максимальных значений в строках из каждой категории в MySQL.