PostgreSQL. Каз задать LIMIT и OFFSET только для одной таблице при JOIN
Есть две таблицы, student и test. Делаем выборку студентов с их результатами тестов. Вот пример http://sqlfiddle.com/#!15/ad0928/2
Как задать LIMIT и OFFSET для первой таблицы student так, чтобы сохранилась возможность сортировки результата как по student так и по test?
Т.е. мне нужно, чтобы количество студентов было, например, 25 штук. Но при этом:
- в выборке видеть так же и тесты которые они проходили (у каждого студента может быть несколько пройденных тестов);
- и иметь возможность отсортировать выборку по набранным баллам за тест.
Исходные таблицы например выглядят так:

И мне нужно получить 4 студентов со всеми их тестами, где студенты с тестом по subject_id = 2 были бы отсортированы по убыванию результата теста.
И вот примерный результат, который хотелось бы получить:

Ответы (1 шт):
Автор решения: Олег
→ Ссылка
Запрос
WITH cte AS (
SELECT
a.id,
a.name,
b.subject_id,
b.user_id,
b.score,
DENSE_RANK () OVER (
ORDER BY a.id
) dr -- делаем подсчет по student.id
FROM
student as a
LEFT JOIN test b ON (a.user_id = b.user_id and b.subject_id in (1, 2, 3, 4))
ORDER BY
case when b.subject_id = 2 then b.score else 0 end DESC, a.id ASC
)
SELECT *
FROM cte
WHERE dr <= 4 -- выбираем только 4 первых студентов
