Пронумеруйте пользователей через ROW_NUMBER() OVER (ORDER BY name, id), затем во внешнем запросе оставьте rn BETWEEN 3 AND 7. PARTITION BY здесь не нужен: нужен единый порядок по всей таблице, а не отдельная нумерация внутри групп. Уникальный id устраняет неопределённость при одинаковых именах.
Как выбрать пользователей с третьего по седьмое по алфавиту с помощью оконной функции?
Вариант задачи с ROW_NUMBER: нумерация по name и id, фильтрация во внешнем запросе и отсутствие PARTITION BY для общего списка.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Рассмотрим оконный вариант задачи: вывести имена пользователей с третьей по седьмую позицию в алфавитном порядке. Предположим таблицу users(id, name), где id уникален, а name заполнен. Речь о позициях пользователей, не об уникальных именах.
WITH numbered AS (
SELECT id, name,
ROW_NUMBER() OVER (
ORDER BY name ASC, id ASC
) AS rn
FROM users
)
SELECT name
FROM numbered
WHERE rn BETWEEN 3 AND 7
ORDER BY rn;
Внутри CTE каждому пользователю присваивается отдельный порядковый номер. Внешний запрос выбирает номера 3, 4, 5, 6 и 7 включительно. Если пользователей меньше семи, вернутся только существующие позиции.
PARTITION BY name здесь изменил бы задачу: нумерация начиналась бы заново для каждого имени. Для общего списка это не требуется. RANK тоже не является заменой: при совпадении ключей сортировки он может присвоить одинаковые ранги и оставить пропуски.
Сортировка в окне отвечает за вычисление номера. Отдельный ORDER BY rn определяет порядок вывода. Для одинаковых имён используется id, чтобы результат на неизменном наборе данных не зависел от плана запроса. Алфавитные правила задаёт колляция; при допустимых NULL нужно отдельно согласовать их расположение или исключение.
В PostgreSQL нельзя поместить проверку оконного номера непосредственно в WHERE того же SELECT. Поэтому используются CTE или вложенный запрос. Для простой выборки такого фрагмента также подходит LIMIT 5 OFFSET 2; оконный вариант полезен, когда номер нужен как часть дальнейших вычислений.