Как выбрать по 2 записи с наивысшим рейтингом из каждой категории?

Как можно создать запрос, используя вложенные запросы, вместо оператора UNION, чтобы решить данную задачу?
  • 2 мая 2024 г. 20:30
Ответы на вопрос 2
Для выбора по 2 записи с наивысшим рейтингом из каждой категории можно воспользоваться следующим запросом с вложенными запросами:

```sql
SELECT id, category, rating
FROM your_table_name t1
WHERE (
    SELECT COUNT(*)
    FROM your_table_name t2
    WHERE t2.category = t1.category AND t2.rating >= t1.rating
) <= 2
ORDER BY category, rating DESC;
```

В этом запросе, для каждой записи из основной таблицы, мы считаем количество записей с такой же категорией, у которых рейтинг равен или выше текущей записи. Если это количество не превышает 2, то текущая запись включается в результат. Затем результат сортируется по категории и рейтингу в порядке убывания.

Примечание: замените your_table_name и столбцы id, category, rating на реальные названия вашей таблицы и столбцов.
Кажется можно решить через оконные функции. Посмотри как тут https://dev.mysql.com/doc/refman/8.0/en/window-fun... 

Пригодится RANK или LEAD.
Похожие вопросы