Оптимальный запрос
Есть конкретный вопрос.
Имеется таблица новостей posts, есть поле area_id
area_id может быть например от 1 до 50
Задача:
Если есть возможность одним запросом, если нет, наиболее оптимальным способом выбрать из базы по 10 записей для каждой area_id
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH cte AS ( SELECT *,
ROW_NUMBER() OVER (PARTITION BY area_id ORDER BY id) AS rn
FROM posts )
SELECT *
FROM cte
WHERE rn <= 10
Ну или ORDER BY RAND().
А если расширить вопрос и нужно выбрать разное количество записей, например area_id = 1 10 штук, area_id = 2 30 штук – sepgg
WITH cte AS ( SELECT *,
ROW_NUMBER() OVER (PARTITION BY area_id ORDER BY id) AS rn
FROM posts ),
cnt AS ( SELECT 1 area_id, 10 amount UNION ALL
SELECT 2, 30 UNION ALL
... )
SELECT *
FROM cte
JOIN cnt USING (area_id)
WHERE cte.rn <= cnt.amount